如何将在本地时区创建的 Date 对象的时区转换为目标时区?
这是我需要的。我希望网络客户端使用DatePicker选择一个日期,但生成的 Date 对象应该看起来就像是在另一个 timezone 中选择的。由于没有办法告诉DatePicker
我必须手动更改日期。
例如,现在是加利福尼亚州 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。我想知道当我从 Google App Engine 数据存储区反序列化这个对象时,它是否会导致任何问题。
或者我应该只生成带有本地加利福尼亚时间的完整日期的字符串,替换字符串中的时区,然后Date
通过调用生成新的DateTimeFormat.parse()
?它看起来也很hacky...
另外,您如何看待JodaTime for GWT?生产是否足够稳定?