我有以下代码:
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
sdf.setTimeZone(TimeZone.getDefault());
return sdf.format(date);
当我使用 date 对象调用此代码时,它会返回相同的日期(显然String
),而无需设置时区。
据我了解,java.util.Date
对象与时区无关。因此,如果我在SimpleDateFormat
上设置时区,那么它应该会改变。但事实并非如此。
如果我检查sdf.getTimeZone()
,那么我看到我的时区已正确设置为 UTC+03:00。
有人知道如何解决这个问题吗?
获取 UTC 格式的时区
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return simpleDateFormat.format(new Date());
上述格式给出的结果为 22-10-2017 18:05:50 UTC。
获取本地格式的时区(电话或设备的时区)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH);
simpleDateFormat.setTimeZone(TimeZone.getDefault());
return simpleDateFormat.format(new Date());
或
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH);
return simpleDateFormat.format(new Date());
上述格式给出的结果为 22-10-2017 18:05:50 UTC+5:30。(提示:-对于印度)
或
以上格式给出的结果为 22-10-2017 18:05:50 IST。(提示:-对于印度)
提示 : - 如果您将此格式化字符串传递到日期,如下所示
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = null;
try {
d =simpleDateFormat.parse("22-10-2017 18:05:50 UTC");
} catch (ParseException e) {
e.printStackTrace();
}
return d.toString();
返回的输出将与设备时区相同,即本地时区或默认时区。(22-10-2017 18:05:50 UTC+5:30 或 22-10-2017 18:05:50 IST)。
即使上述时区设置为 UTC,如果您将内容传递到日期对象中,您也将仅以设备时区获得输出。
,更好的方法是使用Joda Time。它具有格式的ZZ属性,可以为您提供所需的内容。使用简单:
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ssZZ").withLocale(Locale.RU);