查找与纽约午夜对应的 UTC 日期



我有一个用户将他的时区配置为America/New_York。我必须为他安排一个活动,应该从午夜开始,到24小时后(下一个午夜)结束。但是我想将日期存储在UTC的数据库中。

所以我使用 Joda DateTime 写了以下片段。

DateTime dateTime = new DateTime(DateTimeZone.forID(user.getTimezone()));
DateTime todayMidnight = dateTime.toDateMidnight().toDateTime();
// now setting the event start and end time
event.setStartTime(todayMidnight.toDate());
event.setEndTime(todayMidnight.plusDays(1).toDate());

请注意,我的服务器以 UTC 时区运行,

America/New_York是 UTC-5,所以我希望开始日期是4th Feb 2013 5:0:0但对我来说,它将开始日期显示为3rd Feb 2013 23:0:0

上面的代码有什么问题吗?

我建议您完全避免使用DateMidnight。(对于纽约来说可能没问题,但在其他时区,由于夏令时的变化,有些日子不存在午夜。使用 LocalDate 表示日期。

例如:

DateTimeZone zone = DateTimeZone.forID(user.getTimezone());
// Defaults to the current time. I'm not a fan of this - I'd pass in the
// relevant instant explicitly...
DateTime nowInZone = new DateTime(zone);
LocalDate today = nowInZone.toLocalDate();
DateTime startOfToday = today.toDateTimeAtStartOfDay(zone);
DateTime startOfTomorrow = today.plusDays(1).toDateTimeAtStartOfDay(zone);
event.setStartTime(startOfToday.toDate());
event.setEndTime(startOfTomorrow.toDate());

相关内容

  • 没有找到相关文章

最新更新