【问题标题】:Calendar not returning GMT日历未返回 GMT
【发布时间】:2011-12-14 19:03:54
【问题描述】:

我正在尝试将日历对象设置为 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 显示时间。

有人知道为什么会这样吗?

【问题讨论】:

    标签: android calendar gmt


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      如果你想输入字符串,那么更喜欢 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()));
      

      【讨论】:

        【解决方案3】:

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

        要以不同于默认的TimeZone 显示Date,您可以使用SimpleDateFormat

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-08
          • 2012-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-06
          • 1970-01-01
          • 2011-08-09
          相关资源
          最近更新 更多