我正在以格式解析日期:
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
”时,这不起作用。
需要帮助。提前谢谢。
答案 0 :(得分:1)
嗯。是印度标准时间?以色列标准时间?爱尔兰标准时间?所有这些都是对IST的有效解释。请参阅here和here。
如果我不知道,您对计算机的了解程度如何?
唯一可以保证的缩写是由RFC822定义的缩写,即EST,CST,MST,PST,EDT,CDT,MDT,PDT,GMT,UT。即使这样,你也应该避免使用它们。除了RFC822中定义的美国中央标准时间外,CST有5种不同的解释。
相反,您应该使用IANA时区标识符,例如Asia/Kolkata
或Asia/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之间的区别。