【问题标题】:SimpleDateFormat working in IST timezone but not in JST timezoneSimpleDateFormat 在 IST 时区工作,但不在 JST 时区工作
【发布时间】:2013-11-25 18:53:29
【问题描述】:

我正在解析日期格式:

SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss Z yyyy");

当我这样做时,

String collectDate = "Sun Nov 24 13:00:07 IST 2013";
Date date = formatter.parse(collectDate);

字符串解析成功。

但是当相同的代码在 JST 时区机器上运行时,这不起作用,日期为“Sun Nov 24 13:00:07 JST 2013”。

在这方面需要帮助。提前致谢。

【问题讨论】:

  • “不起作用”是什么意思?例外?碰撞?悬挂?结果错误?

标签: java date timezone date-format simpledateformat


【解决方案1】:

嗯。那是印度标准时间吗?以色列标准时间?爱尔兰标准时间?都是对 IST 的有效解释。请参阅herehere

如果我不知道,你指望电脑怎么知道?

唯一可以保证的缩写是RFC822 定义的缩写,它们是 EST、CST、MST、PST、EDT、CDT、MDT、PDT、GMT、UT。即使那样,您也应该避免使用它们。除了 RFC822 中定义的美国中部标准时间之外,CST 有 5 种不同的解释。

相反,您应该使用 IANA 时区标识符,例如 Asia/KolkataAsia/Tokyo

【讨论】:

    【解决方案2】:

    Java 在内部使用 UTC (nee GMT)。当您显示它时,您将及时获得那个时刻(但本地偏移量与GMT+9 例如Japan Standard Time)。

    【讨论】:

      【解决方案3】:

      javadoc 明确指出

      SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

      这正是它所做的,它仅用于解析和格式化 Date 对象。 java 隐式使用 UTC 时间来表示日期对象。如果您尝试打印它,它会使用系统中设置的本地时区来“格式化”日期对象并将其打印到标准输出。

      您可以在处理 JST 格式的日期时遵循相同的方法。这是执行此操作的代码的 sn-p。

      public static void main( String[] args )
         {
      
        SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss Z yyyy");
      
      
        String collectDate = "Sun Nov 24 13:00:07 JST 2013";
        try
        {
           Date date = formatter.parse(collectDate);
           System.out.println(date);
           formatter.setTimeZone(TimeZone.getTimeZone("JST"));
           System.out.println(formatter.format(date));
        }
        catch (ParseException e)
        {
           e.printStackTrace();
        }
      
         } 
      

      您可以清楚地看到第一个和第二个 sysout 之间的区别。

      【讨论】:

        猜你喜欢
        • 2013-10-07
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        相关资源
        最近更新 更多