我一直在Java EE应用程序中使用Joda Time进行日期时间操作,其中关联客户端提交的日期时间的字符串表示已使用以下转换例程转换,然后将其提交到数据库,即在getAsObject()
方法中. JSF转换器.
org.joda.time.format.DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern("dd-MMM-yyyy hh:mm:ss a Z").withZone(DateTimeZone.UTC);
DateTime dateTime = formatter.parseDateTime("05-Jan-2016 03:04:44 PM +0530");
System.out.println(formatter.print(dateTime));
Run Code Online (Sandbox Code Playgroud)
当地时区比UTC
/ 提前5小时30分钟GMT
.因此,转换为UTC
应从使用Joda Time正确发生的日期时间中扣除5小时30分钟.它按预期显示以下输出.
05-Jan-2016 09:34:44 AM +0000
Run Code Online (Sandbox Code Playgroud)
► 已+0530
取代时区偏移量,+05:30
因为它取决于<p:calendar>
以此格式提交区域偏移量.似乎不可能改变这种行为<p:calendar>
(否则本身就不需要这个问题).
但是,如果尝试在Java 8中使用Java Time API,那么同样的事情就会被破坏.
java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss a Z").withZone(ZoneOffset.UTC);
ZonedDateTime dateTime = ZonedDateTime.parse("05-Jan-2016 03:04:44 PM +0530", formatter);
System.out.println(formatter.format(dateTime));
Run Code Online (Sandbox Code Playgroud)
它意外地显示以下错误输出.
05-Jan-2016 03:04:44 PM +0000
Run Code Online (Sandbox Code Playgroud)
显然,转换的日期时间不符合UTC
它应该转换的日期时间.
它需要采用以下更改才能正常工作.
java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss a z").withZone(ZoneOffset.UTC); …
Run Code Online (Sandbox Code Playgroud)