我只想转换" 2016-01-28T12:08:47.676706-05:00 "但得到例外。任何人都可以建议我使用DateFormat" yyyy-MM-dd HH:mm:ss.SSSZ"将字符串解析为Date。
答案 0 :(得分:1)
我希望以下代码可以帮助您
String dateString = "2016-01-28T12:08:47.676706-05:00";
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.getDefault());
format.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = format.parse(dateString);
答案 1 :(得分:0)
OffsetDateTime.parse( "2016-01-28T12:08:47.676706-05:00" )
使用现代 java.time 类来取代麻烦的遗留日期时间类。
遗留类的分辨率仅限于毫秒级,而 java.time 类的分辨率更高,为纳秒级。这对于输入字符串中的微秒来说已经足够了。
您的输入符合标准ISO 8601格式。在解析/生成字符串时,java.time类默认使用标准格式。所以根本不需要指定格式化模式。
我们将您的输入解析为OffsetDateTime
,因为它包含来自UTC的偏移但不包括时区。
OffsetDateTime odt = OffsetDateTime.parse( "2016-01-28T12:08:47.676706-05:00" ) ;
odt.toString():2016-01-28T12:08:47.676706-05:00
要查看与UTC值相同的时刻,请提取Instant
。
Instant instant = odt.toInstant() ;
instant.toString():2016-01-28T17:08:47.676706Z
或调整为时区,以获得ZonedDateTime
个对象。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
zdt.toString():2016-01-29T06:08:47.676706 + 13:00 [太平洋/奥克兰]
要生成其他格式的字符串,请搜索DateTimeFormatter
类的Stack Overflow。已经多次覆盖。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。