Android 日历未返回GMT

Android 日历未返回GMT,android,calendar,gmt,Android,Calendar,Gmt,我试图将日历对象设置为GMT,但getTime()总是以GMT+1(我的当前时间)的形式返回时间。我试过: Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC")); Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("ske

我试图将日历对象设置为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”;但是

始终以GMT+1显示时间


有人知道为什么会发生这种情况吗?

如果您想使用字符串格式,则更喜欢使用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()));
Calendar.getTime()
返回一个
Date
对象。在Java中,
Date
只是UNIX时代开始的长时间戳的持有者


要在不同于默认时区的
时区中显示
日期
,您可以使用
简化格式

,您需要调整夏令时。我不确定这是否有帮助,但这是我在一个应用程序中用于将任何时区调整为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);
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);