将时区应用于日期格式不起作用

时间:2016-10-06 06:36:46

标签: java android datetime

在我的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);

然而,它没有应用时区。我已经尝试在dateFormatformatted设置它,无论我做什么,它仍然会以6:24 AM返回。

TimeZone.getDefault()不应该在运行应用的设备上查看时区并相应地调整时间吗?

2 个答案:

答案 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);