SimpleDateFormat解析5小时 - 时区问题?

时间:2017-01-22 18:39:13

标签: java android simpledateformat

由于问题的一致性以及我在GMT-5中的事实,我认为这是一个时区问题。我的代码在

之下
MediaMetadataRetriever mdr = new MediaMetadataRetriever();
mdr.setDataSource(path);
date = mdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);

try {
     date = new SimpleDateFormat("MMM dd, yyyy   h:mm a", Locale.getDefault()).format(new SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.getDefault()).parse(date));
} catch (ParseException e) {
    e.printStackTrace();
}

我为解决这个问题做了几件事,包括以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.getDefault());
sdf.setTimezone(TimeZone.getDefaultTimezone);

try {
    date = new SimpleDateFormat("MMM dd, yyyy   h:mm a", Locale.getDefault()).format(sdf.parse(date));
} catch (ParseException e) {
    e.printStackTrace();
}

然而,没有任何改变。我希望能够为每个设备使用默认时区。

感谢任何帮助

编辑:所以如果我放的时区有效     sdf.setTimeZone(TimeZone.getTimeZone(" Eastern Standard Time"));

但没有     sdf.setTimeZone(TimeZone.getDefault());

此外,这里有一些使用TimeZone.getDefault()方法的示例输入/输出: 输入:20170121T212723输出:2017年1月22日上午2:27(请注意原始日期/时间是1月21日,但格式化的是1月22日)预计输出将是2017年1月21日下午9:27

所以也许这个问题更多的是为什么TimeZone.getDefault()没有返回正确的时区?

1 个答案:

答案 0 :(得分:0)

也许对某人有用。 原因是TimeZone.getDefault()以ZoneInfo对象的形式返回响应,而getTimeZone(“东部标准时间”)以SimpleTimeZone对象的形式返回响应。

所以这种解决方案在kotlin中对我有用(我认为结果在Java中将是相同的):

sdf.timeZone(TimeZone.getTimeZone(TimeZone.getDefault()。toString()))