How to save DateTime as Date with TimeZone offset included?
我有一些日期时间,包括欧洲/维也纳时区(+0200)。它是通过以下方法获取的:
1 | settlementService.getPendingPeriodStart() |
用这样的绳子:
2012-06-01T00:00:00.000+02:00
现在我想将这个日期2012-06-01保存为java.util.date,所以我尝试了如下方法:
1 | transactionDate = settlementService.getPendingPeriodStart().withTime(0, 0, 0, 0).toDate(); |
但结果是:
Thu May 31 22:00:00 UTC 2012
将日期时间结果保存为日期(包括时区偏移量)的最佳方法是什么,因此TransactionDate应该是2012-06-01。我可以修补格里高利日历,但这不是我喜欢的。这应该更容易些,不是吗?
顺便说一下(如果不清楚的话)。本地系统在UTC上运行。这就是为什么结果是2012年5月31日星期四22:00:00。
我想我找到了解决办法。(如果你知道更好的解决方案,请告诉我)
1 2 3 4 5 6 | DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); DateTime dateTimeWithTimeZone = new DateTime(DateTimeZone.forID("Europe/Vienna")).withDate(2012, 06, 01).withTime(0, 0, 0, 0); Date dateWithTimeZoneIncluded = dateTimeWithTimeZone.toLocalDate().toDate(); System.out.println(dateFormat.format(dateWithTimeZoneIncluded)); |
结果与预期一致,为2012-06-01。
用户的日期和时区是两个不同的东西。一个是日期,另一个是首选项或表示参数。
不要试图将它们存储在同一个字段中。
考虑到甚至不可能有效地将它们存储在一起(而不会丢失精度),因为只有在指定日期为UTC日期的情况下,才能将日期存储在long中。
您可以将时区另存为偏移量(由于情况非常小,经常建议将分钟数保留在此偏移量中(