由于问题的一致性以及我在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()没有返回正确的时区?
答案 0 :(得分:0)
也许对某人有用。 原因是TimeZone.getDefault()以ZoneInfo对象的形式返回响应,而getTimeZone(“东部标准时间”)以SimpleTimeZone对象的形式返回响应。
所以这种解决方案在kotlin中对我有用(我认为结果在Java中将是相同的):
sdf.timeZone(TimeZone.getTimeZone(TimeZone.getDefault()。toString()))