我正在分析格式为的日期
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);
字符串已成功解析。
但当在日期为"Sun Nov 24 13:00:07 JST 2013
"的JST时区机器中运行相同的代码时,这就不起作用了。
需要帮助。提前谢谢。
嗯。那是印度标准时间吗?以色列标准时间?爱尔兰标准时间?所有这些都是对IST的有效解释。看看这里和这里。
如果我说不出来,你希望电脑怎么知道?
唯一可以保证的缩写是RFC822定义的缩写,即EST、CST、MST、PST、EDT、CDT、MDT、PDT、GMT、UT。即使这样,你也应该避免使用它们。CST除了RFC822中定义的美国中央标准时间之外,还有5种不同的解释。
相反,您应该使用IANA时区标识符,例如Asia/Kolkata
或Asia/Tokyo
。
Java在内部使用UTC(nee GMT)。当你显示它时,你得到的是时间上的那一刻(但有GMT+9
的局部偏移,例如Japan Standard Time
)。
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();
}
}
您可以清楚地看到第一个系统输出和第二个系统输出之间的区别。