首先,我想澄清,这不是夏令时问题。
其次,经过努力,似乎与SimpleDateFormat中使用的语言环境有关。
第三,它似乎只发生在 PST/PDT 时区。 UTC 没问题。
<小时/>这是测试代码。
使用美国和英语区域设置来解析相同的日期。
try {
Date date = new Date();
SimpleDateFormat US_format = new SimpleDateFormat("MMM d HH:mm:ss z", Locale.US);
SimpleDateFormat EN_format = new SimpleDateFormat("MMM d HH:mm:ss z", Locale.ENGLISH);
US_format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); //Set PST Timezone
String US_str = US_format.format(date);
Log.i("DEBUG", "US_str: " + US_str);
Log.i("DEBUG", "US_str: " + US_format.format(US_format.parse(US_str)));
EN_format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); //Set PST Timezone
String EN_str = EN_format.format(date);
Log.i("DEBUG", "EN_str: " + EN_str);
Log.i("DEBUG", "EN_str: " + EN_format.format(EN_format.parse(EN_str)));
} catch (ParseException e) {
Log.i("DEBUG", "Parsing Error");
}
结果是
02-26 19:42:42.863 I/DEBUG﹕ US_str: Feb 26 19:42:42 PST
02-26 19:42:42.865 I/DEBUG﹕ US_str: Feb 26 18:42:42 PST
02-26 19:42:42.865 I/DEBUG﹕ EN_str: Feb 26 19:42:42 PST
02-26 19:42:42.866 I/DEBUG﹕ EN_str: Feb 26 19:42:42 PST
这是一个错误吗? 为什么 Locate.US 存在一小时的差异?
======================================
更新: 这似乎只发生在 Android 5.0 设备上。 其他环境似乎还可以。
在 Android 问题跟踪器上发布了一个错误。 (问题158265)
最佳答案
我认为错误可能来自 Logger。它与区域设置无关。
Date date = new Date();
SimpleDateFormat US_format = new SimpleDateFormat("MMM d HH:mm:ss z", Locale.US);
SimpleDateFormat EN_format = new SimpleDateFormat("MMM d HH:mm:ss z", Locale.ENGLISH);
String US_str = US_format.format(date);
System.out.println( "US_str: " + US_str);
System.out.println( "US_str: " + US_format.format(US_format.parse(US_str)));
String EN_str = EN_format.format(date);
System.out.println( "EN_str: " + EN_str);
System.out.println( "EN_str: " + EN_format.format(EN_format.parse(EN_str)));
这是在我的电脑上获得的输出:
US_str:2 月 27 日 12:18:26 国际标准时间
US_str:2 月 27 日 12:18:26 国际标准时间
EN_str:2 月 27 日 12:18:26 国际标准时间
EN_str:2 月 27 日 12:18:26 国际标准时间
希望这对你有帮助。
关于java - 通过 SimpleDateFormat 解析时间字符串得到错误的日期。 (偏移 1 小时)[Android/Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757288/