2013-11-25 29 views
0

我解析格式的日期的工作:SimpleDateFormat的在IST时区而不是在JST时区

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

需要关于此的帮助。提前致谢。

+1

“不起作用”是什么意思?例外?崩溃?挂?错误的结果? – Taylor

回答

0

Java在内部使用UTC(nee GMT)。当你显示它时,你会得到那个时间点(但是从GMT+9的本地偏移量,例如Japan Standard Time)。

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

1

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

如果我说不出来,你如何期待计算机知道?

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

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

相关问题