将字符串转换为java.util.date
我正在处理需要转换为java.util.date对象的日期字符串 我使用以下代码来执行此操作:将字符串转换为java.util.date,java,date,date-conversion,Java,Date,Date Conversion,我正在处理需要转换为java.util.date对象的日期字符串 我使用以下代码来执行此操作: public void setDates(String from, String to) throws ParseException { Date fromDate = new Date(); Date toDate = new Date(); SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); from
public void setDates(String from, String to) throws ParseException
{
Date fromDate = new Date();
Date toDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
fromDate = df.parse(from);
toDate = df.parse(to);
this.setDepartDate(fromDate);
this.setReturnDate(toDate);
}
问题是,我必须转换的字符串值总是(我无法控制)以下列格式:“2013年9月20日”
这导致我的函数在到达fromDate=df.parse(from)时通过ParseException代码>
有谁能帮我理解原因,并提出解决方案吗?查看可用的格式选项,但基本上,您需要将日期格式更改为类似于dd-MMMM,yyyy
try {
String dateValue = "20 September, 2013";
SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
Date date = df.parse(dateValue);
System.out.println(date);
} catch (ParseException exp) {
exp.printStackTrace();
}
哪个输出
Fri Sep 20 00:00:00 EST 2013
查看可用的格式选项,但基本上,您需要将日期格式更改为类似于dd-MMMM,yyyy
try {
String dateValue = "20 September, 2013";
SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
Date date = df.parse(dateValue);
System.out.println(date);
} catch (ParseException exp) {
exp.printStackTrace();
}
哪个输出
Fri Sep 20 00:00:00 EST 2013
你写的
[…]格式如下:“2013年9月20日”
那么您的simpleDataFormat
应该是
"dd MMM, yyyy"
您可以查看您编写的。
[…]格式如下:“2013年9月20日”
那么您的simpleDataFormat
应该是
"dd MMM, yyyy"
您可以按照以下格式签出。
SimpleDateFormat df = new SimpleDateFormat("dd MMMMM, yyyy");
还要确定是否需要进行此解析,以及是否需要严格使用setLenient(false)
默认情况下,解析是宽松的:如果输入不是使用的形式
通过此对象的format方法,但仍然可以解析为日期,然后
解析成功。客户可能会坚持严格遵守
通过调用setLenient设置格式(false)
还要注意,SimpleDateFormat
不是线程安全的。如果有一个选择,我建议使用它提供更多增强的功能 按照以下格式使用
SimpleDateFormat df = new SimpleDateFormat("dd MMMMM, yyyy");
还要确定是否需要进行此解析,以及是否需要严格使用setLenient(false)
默认情况下,解析是宽松的:如果输入不是使用的形式
通过此对象的format方法,但仍然可以解析为日期,然后
解析成功。客户可能会坚持严格遵守
通过调用setLenient设置格式(false)
还要注意,SimpleDateFormat
不是线程安全的。如果有一个选择,我建议使用它提供更多增强的功能 解析日期时,需要了解一些上下文或使用一些假设。您可以使用SimpleDataFormat,但在使用字符串之前,可能需要预解析字符串以查看其格式。您可能需要尝试多种格式,以查看是否有一种或多种方法可以解析日期
顺便说一句,1930年2月1日或2030年1月2日或2001年2月30日是01/02/30,您需要了解该日期可能意味着什么,或者对格式有一些控制。解析日期时,您需要了解一些上下文或使用一些假设。您可以使用SimpleDataFormat,但在使用字符串之前,可能需要预解析字符串以查看其格式。您可能需要尝试多种格式,以查看是否有一种或多种方法可以解析日期
顺便说一句,1930年2月1日或2030年1月2日或2001年2月30日是01/02/30,您需要了解日期的含义或对格式有一定的控制。您需要使用以下日期模式,dd MMMM,yyyy
try {
String dateValue = "20 September, 2013";
SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
Date date = df.parse(dateValue);
System.out.println(date);
} catch (ParseException exp) {
exp.printStackTrace();
}
试试这个代码
String dateValue = "20 September, 2013";
// Type of different Month views
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy"); //20 September, 2013
SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM, yyyy"); //20 09, 2013
SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM, yyyy"); //20 Sep, 2013
Date date = sdf.parse(dateValue); // returns date object
System.out.println(date); // outputs: Fri Sep 20 00:00:00 IST 2013
您需要使用以下日期模式,dd-MMMM,yyyy
try {
String dateValue = "20 September, 2013";
SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
Date date = df.parse(dateValue);
System.out.println(date);
} catch (ParseException exp) {
exp.printStackTrace();
}
试试这个代码
String dateValue = "20 September, 2013";
// Type of different Month views
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy"); //20 September, 2013
SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM, yyyy"); //20 09, 2013
SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM, yyyy"); //20 Sep, 2013
Date date = sdf.parse(dateValue); // returns date object
System.out.println(date); // outputs: Fri Sep 20 00:00:00 IST 2013
LocalDate
现代方法使用java.time类取代了几年前麻烦的旧日期时间类(date
,Calendar
,等等)
String input = "20 September, 2013" ;
Locale locale = Locale.US ; // Determines the human language and cultural norms used in parsing the input string.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "d MMMM, uuuu" , locale ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
看这个
ld.toString():2013-09-20
ZoneDateTime
如果希望一天中的某个时间具有该日期,例如一天中的第一个时刻,则必须指定时区。时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”
如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间出现,因此您的结果可能会有所不同。最好将[desired/expected time zone][2]明确指定为参数
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)
应用该ZoneId
以获取zoneDateTime
。永远不要假设一天从00:00:00开始。夏时制(DST)等异常意味着一天可能在另一个时间开始,如01:00:00。让java.time确定一天中的第一个时刻
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
Instant
要调整为UTC,请提取一个即时值
Instant instant = zdt.toInstant() ;
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(
LocalDate
现代方法使用java.time类来支持