【发布时间】:2015-04-29 16:56:17
【问题描述】:
首先,我想明确一点,这不是夏令时问题。
其次,经过努力,似乎与SimpleDateFormat中使用的locale有关。
第三,它似乎只发生在 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: 太平洋标准时间 2 月 26 日 19:42:42
02-26 19:42:42.866 I/DEBUG: EN_str: 太平洋标准时间 2 月 26 日 19:42:42
这是一个错误吗? 为什么 Locate.US 会有一小时的差异?
======================================
更新: 它似乎只发生在 Android 5.0 设备上。 其他环境好像没问题。
在 Android 问题跟踪器上发布了一个错误。 (问题158265)
【问题讨论】:
-
还没有修复?我在德国,2015 年 4 月 17 日 09:26。调用字符串 currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());返回 2015-04-16 16:22:49(错误的日期和错误的时间)。
标签: java android timezone locale simpledateformat