我想从字符串中解析日期时间。 这是我的代码:
String dateStr = "2016-08-18T14:44:56.225Z"
final String Pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
final DateTimeFormatter dtf = DateTimeFormat.forPattern(Pattern);
LocalDate dt = dtf.parseLocalDate(dateStr);
那么我只从上面的代码中收到年、月和日(2016-08-18)。 我无法获取小时、分钟和秒。
以前有人遇到过这个问题吗?你是怎么解决的? 我使用 Java 7。
也可以使用
LocalDateTime
来获取时间:
String dateStr = "2016-08-18T14:44:56.225Z"
final String Pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
final DateTimeFormatter dtf = DateTimeFormat.forPattern(Pattern);
LocalDateTime dt = dtf.parseLocalDateTime(dateStr);
您还忽略了时区(在本例中为 UTC/Zulu - 最后的
Z
) - 确保您是否真的想这样做。
Instant
输入末尾的
Z
"2016-08-18T14:44:56.225Z"
是 +00:00
的缩写,发音为“Zulu”,意思是与 UTC 时间子午线的零时-分-秒偏移。
该输入应被解析为
Instant
。 java.time.Instant
类代表 UTC 中的时刻。这是 java.time 框架的基本构建块。
Instant instant = Instant.parse( "2016-08-18T14:44:56.225Z" ) ;
现在调整您选择查看这一时刻的时区。请记住,对于任何给定时刻,时间和日期在全球范围内因时区而异。
ZoneId z = ZoneId.of( "America/Edmonton" ) ;
应用该时区,通过该地区人们使用的挂钟/日历查看同一时刻。您生成了一个
ZonedDateTime
对象。
ZonedDateTime zdt = instant.atZone( z ) ;
现在您已在该区域中看到了日期和时间。
LocalDate
LocalDate
类表示仅日期值、年、月和日。没有时间、没有时区、没有偏移。
我们可以从上面的
LocalDate
中提取一个ZonedDateTime
。
LocalDate ld = zdt.toLocalDate() ;
关于您的格式模式:`Pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'":
Z
用单引号引起来。这意味着“期待此文本,但忽略此文本”。您永远不应该忽略该文本。 Z
表示重要信息,如上所述,零偏移量。toString
课程上简单调用 parse
和 Instant
。pattern
,而不是Pattern
。