首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Joda DateTime时区,但不更改时间

更改Joda DateTime时区,但不更改时间
EN

Stack Overflow用户
提问于 2015-05-14 21:13:44
回答 1查看 219关注 0票数 0

我正在使用(可能是错误的) Joda DateTime在提醒应用程序中存储提醒时间。当设备上的时区更改时(因为DST或只是移动到不同的TZ),我希望能够重置提醒以使用当前时区,但保留时间。

例如:我设置了5月15日星期五的提醒,时间是15:00。如果时区在此时间之前发生更改,我希望能够在当地时间5月15日星期五的15:00重新创建提醒。

我已经尝试过使用withZoneRetainFields,但我无法保持时间不变:

代码语言:javascript
复制
new DateTime(reminderTimeMillis, DateTimeZone.forID(previousTimeZone)).withZoneRetainFields(DateTimeZone.getDefault())
EN

回答 1

Stack Overflow用户

发布于 2015-05-16 18:22:56

嗯,这个方法基本上应该是有效的:

代码语言:javascript
复制
@Test
public void change_timezone_of_reminder() {
    DateTime originalReminderDateTime = LocalDateTime.parse("2015-05-15T15:00").toDateTime(
            DateTimeZone.forID("Europe/Berlin"));
    assertThat(originalReminderDateTime.toString(), equalTo("2015-05-15T15:00:00.000+02:00"));
    long reminderMillis = originalReminderDateTime.getMillis();
    DateTime updatedTime = new DateTime(reminderMillis, DateTimeZone.forID("Europe/Berlin"))
            .withZoneRetainFields(DateTimeZone.forID("America/New_York"));
    assertThat(updatedTime.toLocalDateTime(), equalTo(LocalDateTime.parse("2015-05-15T15:00")));
    assertThat(updatedTime.toString(), equalTo("2015-05-15T15:00:00.000-04:00"));
}

那么,您如何评估时间字段没有发生变化?

此外,如果您将提醒时间存储为millis-after-epoch,如果您使用完整时区(“欧洲/柏林”)而不是固定的偏移量来计算millis,则不需要针对DST偏移调整提醒时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30238325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档