SimpleDateFormat在IST时区工作但不在JST时区工作

时间:2013-11-25 18:53:30

标签: java date timezone date-format simpledateformat

我正在以格式解析日期:

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”时,这不起作用。

需要帮助。提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

如果我不知道,您对计算机的了解程度如何?

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

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

答案 1 :(得分:0)

Java内部使用UTC(即GMT)。当您显示它时,您就会及时获得该时刻(但距离GMT+9的本地偏移量,例如Japan Standard Time)。

答案 2 :(得分:0)

javadoc明确指出

  

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

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

您可以在以JST格式处理日期时遵循相同的规则。这是执行该操作的代码片段。

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之间的区别。