在我的Android应用中,我有一个这样的字符串,String date = "2016-09-24T06:24:01Z";
我使用此代码将其转换为更好看的日期格式:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dateFormat.setTimeZone(TimeZone.getDefault());
DateFormat formatted = new SimpleDateFormat(format);
Date result = dateFormat.parse(date);
dateString = formatted.format(result);
然而,它没有应用时区。我已经尝试在dateFormat
和formatted
设置它,无论我做什么,它仍然会以6:24 AM
返回。
TimeZone.getDefault()
不应该在运行应用的设备上查看时区并相应地调整时间吗?
答案 0 :(得分:0)
当您使用的java.util.date
没有Time Zone
时。它表示UTC/GMT
没有时区偏移。见下文。
所以改变这一行
dateFormat.setTimeZone(TimeZone.getDefault());
到这个
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
或者
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
答案 1 :(得分:0)
如果您知道当前时区:
TimeZone tzone = TimeZone.getTimeZone("America/Los_Angeles");
tzone.setDefault(tzone);
如果您不知道当前时区:
Calendar cal = Calendar.getInstance();
long milliDiff = cal.get(Calendar.ZONE_OFFSET);
// Got local offset, now loop through available timezone id(s).
String [] ids = TimeZone.getAvailableIDs();
String name = null;
for (String id : ids) {
TimeZone tz = TimeZone.getTimeZone(id);
if (tz.getRawOffset() == milliDiff) {
// Found a match.
name = id;
break;
}
}
TimeZone tzone = TimeZone.getTimeZone(name);
tzone.setDefault(tzone);