如何将本地时区中创建的日期对象的时区转移到GWT客户端中的目标时区?

如何将本地时区中创建的日期对象的时区转移到GWT客户端中的目标时区?,gwt,date,timezone,google-cloud-datastore,gwt2,Gwt,Date,Timezone,Google Cloud Datastore,Gwt2,如何将在本地时区中创建的日期对象的时区转换为目标时区 这是我需要的。我希望web客户端使用来选择日期,但结果日期对象应该看起来像是在另一个时区选择的。由于无法告诉日期选择器执行此操作,我必须手动切换日期 例如,现在是2012年4月6日加州凌晨2:42。创建日期将以UTC-7时区为单位。我想在欧洲/莫斯科时区设置日期对象为2012年4月6日凌晨2:42 下面是我现在要做的: final TimeZoneConstants constTz = GWT.create(TimeZoneConstants

如何将在本地时区中创建的日期对象的时区转换为目标时区

这是我需要的。我希望web客户端使用来选择日期,但结果日期对象应该看起来像是在另一个时区选择的。由于无法告诉日期选择器执行此操作,我必须手动切换日期

例如,现在是2012年4月6日加州凌晨2:42。创建日期将以UTC-7时区为单位。我想在欧洲/莫斯科时区设置日期对象为2012年4月6日凌晨2:42

下面是我现在要做的:

final TimeZoneConstants constTz = GWT.create(TimeZoneConstants.class);
final TimeZone timeZoneMsk = TimeZone.createTimeZone(constTz.europeMoscow());
final TimeZone timeZoneCali = TimeZone.createTimeZone(constTz.americaLosAngeles());

Date curTime = new Date();

DateTimeFormat dateTimeFormat = DateTimeFormat.getFullDateTimeFormat();
Date mskTime = new Date(curTime.getTime() - (curTime.getTimezoneOffset() - timeZoneMsk.getStandardOffset()) * 60 * 1000);

String strLocal = dateTimeFormat.format(curTime, timeZoneCali); // Friday, 2012 April 06 02:42:59 Pacific Daylight Time
String strMsk = dateTimeFormat.format(mskTime, timeZoneMsk);    // Friday, 2012 April 06 02:42:59 Moscow Standard Time
此方法存在两个问题:

  • 如果你问我这看起来很奇怪
  • mskTime
    中的时区仍然是-0007。我想知道当我从GoogleAppEngine数据存储反序列化这个对象时,它是否会在将来引起任何问题
或者我应该只生成一个包含加州当地时间完整日期的字符串,替换字符串中的时区,然后通过调用
DateTimeFormat.parse()
生成新的
date
?它看起来也很黑


你觉得怎么样?对于生产来说,它足够稳定吗?

您的代码看起来大致正确。使用
DateTimeFormat.parse
可能会让普通读者更清楚地了解其意图。给你一个时区A和B以及一个
Date
对象的情况并不常见,你必须生成一个新的
Date
对象,当在B中格式化时,该对象的时间与在A中格式化时的原始对象的时间相同

mskTime中的时区仍然是-0007。我想知道当我从GoogleAppEngine数据存储反序列化这个对象时,它是否会在将来引起任何问题


不,不会有问题的。请记住,
Date
对象表示未绑定到时区的通用时间点。莫斯科是4月6日14:40,加利福尼亚是4月6日03:40,因此
日期
对象是相等的。

您的代码看起来大致正确。使用
DateTimeFormat.parse
可能会让普通读者更清楚地了解其意图。给你一个时区A和B以及一个
Date
对象的情况并不常见,你必须生成一个新的
Date
对象,当在B中格式化时,该对象的时间与在A中格式化时的原始对象的时间相同

mskTime中的时区仍然是-0007。我想知道当我从GoogleAppEngine数据存储反序列化这个对象时,它是否会在将来引起任何问题

不,不会有问题的。请记住,
Date
对象表示未绑定到时区的通用时间点。莫斯科是4月6日14:40,加利福尼亚是4月6日03:40,因此
日期
对象是相等的