public static void main(String[] args) {
String opDate = "Tue Jan 03 00:00:00 MSK 2006";
String date = convertDate(opDate, "yyyyMMdd");
System.out.println("opDate: " + opDate);
System.out.println("date: " + date);
}
public static String convertDate(String opDate, String dateFormat) {
Date date = new Date();
// Mon Jan 02 00:00:00 MSK 2006
SimpleDateFormat dateParser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
try {
date = dateParser.parse(opDate);
} catch (Exception e) {
System.out.println("exception = " + e.toString());
}
SimpleDateFormat df = new SimpleDateFormat(dateFormat);
df.setTimeZone(TimeZone.getTimeZone("Russia/Moscow"));
String strDate = df.format( date.getTime() );
return strDate.trim();
}
输出:
opDate: Tue Jan 03 00:00:00 MSK 2006
date: 20060102
为什么返回 1 月 2 日?
最佳答案
问题在于获取“俄罗斯/莫斯科”
时区。正确的区域信息 ID 是“欧洲/莫斯科”
。更改 ID,问题就消失了:
df.setTimeZone(TimeZone.getTimeZone("Europe/Moscow"));
不幸的是,TimeZone.getTimeZone("random rubbish")
返回 UTC 时区,而不是以某种方式让您知道它已损坏。
关于java - 输入日期 Jan 03 但返回 Jan 02,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888424/