2

我正在尝试将日历对象设置为 GMT,但 getTime() 始终返回 GMT+1 中的时间(我的当前时间)。我努力了:

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("skeniver"));

他们显然都返回格林威治标准时间,因为

cal.getTimeZone().getDisplayName()

返回“GMT+00:00”;但

cal.getTime().toString();

始终以 GMT+1 显示时间。

有谁知道为什么会这样?

4

3 回答 3

1

您需要调整夏令时。我不确定这是否会有所帮助,但它是我用于将任何时区调整为 UTC 的代码,该应用程序目前正被世界各地的许多人使用。我使用Date而不是,Calendar但它有效......

Date dateTimeNow = new Date();
TimeZone tz = TimeZone.getDefault();
int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(dateTimeNow) ? tz.getDSTSavings() : 0);
Date dateTimeNowUTC = new Date(dateTimeNow.getTime() - currentOffsetFromUTC);
于 2011-10-25T09:54:11.027 回答
0

如果您想输入字符串,则更喜欢 DateFormat 或 SimpleDateFormat

这是示例

SimpleDateFormat sdf = new SimpleDateFormat(); // here you can also define your format of date for e.g. "dd/MM/yyyy z"

sdf.setTimeZone("GMT");

Calendar cal = Calendar.getInstance();
System.out.println(sdf.format(cal.getTime()));
于 2011-10-25T09:39:21.820 回答
0

Calendar.getTime()返回一个Date对象。在 Java 中,aDate只是从 UNIX 纪元开始的长时间戳的持有者。

Date以不同于TimeZone默认值的方式显示 a,您可以使用 a SimpleDateFormat

于 2011-10-25T09:40:35.673 回答