如何将本地时区中创建的日期对象的时区转移到GWT客户端中的目标时区?
如何将在本地时区中创建的日期对象的时区转换为目标时区 这是我需要的。我希望web客户端使用来选择日期,但结果日期对象应该看起来像是在另一个时区选择的。由于无法告诉日期选择器执行此操作,我必须手动切换日期 例如,现在是2012年4月6日加州凌晨2:42。创建日期将以UTC-7时区为单位。我想在欧洲/莫斯科时区设置日期对象为2012年4月6日凌晨2:42 下面是我现在要做的:如何将本地时区中创建的日期对象的时区转移到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
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
此方法存在两个问题:
- 如果你问我这看起来很奇怪
中的时区仍然是-0007。我想知道当我从GoogleAppEngine数据存储反序列化这个对象时,它是否会在将来引起任何问题mskTime
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,因此日期
对象是相等的