【发布时间】:2010-09-19 10:10:09
【问题描述】:
我有一个来自电子邮件标题的字符串,例如 Date: Mon, 27 Oct 2008 08:33:29 -0700。我需要的是一个 GregorianCalendar 的实例,它将代表同一时刻。就这么简单——我该怎么做?
对于最快的 - 这不会正常工作:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
因为它将时区标准化为 UTC(或您的本地机器时间,取决于 Java 版本)。我需要的是 calendar.getTimeZone().getRawOffset() 返回-7 * milisInAnHour。
【问题讨论】:
-
次要:您应该使用 Calendar.getInstance() 而不是直接实例化 GregorianCalendar。这仍然很灵活,因此当您的应用在印度(例如)运行时,您不必更改所有代码。
-
@Daniel:不一定。这取决于在印度运行的应用程序是否与印度人、ISO 日期格式、其他未本地化的流程或您有什么交互。
-
虽然我同意您应该使用 Calendar.getInstance(并且您应该使用通用类型 Calendar,而不是 GregorianCalendar)... getInstance() 仅在您的语言/国家是泰语时返回非 GregorianCalendar /泰国!