我正在使用(可能是错误的) Joda DateTime在提醒应用程序中存储提醒时间。当设备上的时区更改时(因为DST或只是移动到不同的TZ),我希望能够重置提醒以使用当前时区,但保留时间。
例如:我设置了5月15日星期五的提醒,时间是15:00。如果时区在此时间之前发生更改,我希望能够在当地时间5月15日星期五的15:00重新创建提醒。
我已经尝试过使用withZoneRetainFields,但我无法保持时间不变:
new DateTime(reminderTimeMillis, DateTimeZone.forID(previousTimeZone)).withZoneRetainFields(DateTimeZone.getDefault())发布于 2015-05-16 18:22:56
嗯,这个方法基本上应该是有效的:
@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偏移调整提醒时间。
https://stackoverflow.com/questions/30238325
复制相似问题