我有以下代码:
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
sdf.setTimeZone(TimeZone.getDefault());
return sdf.format(date);
当我使用日期对象调用此代码时,它会返回相同的日期(显然为String
)而不设置时区。
据我所知,java.util.Date
对象与时区无关。因此,如果我在SimpleDateFormat
上设置时区,则应该更改。但它没有。
如果我检查sdf.getTimeZone()
,那么我发现我的时区已正确设置为UTC + 03:00。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
以UTC格式获取TimeZone
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。
以本地格式(TimeZone of Phone或设备)获取TimeZone
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,如果您将内容传递到日期对象,也只能在设备时区输出。
答案 1 :(得分:-1)
我认为,更好的方法是使用Joda Time代替。它的格式具有ZZ属性,可以为您提供所需的属性。 用法很简单:
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ssZZ").withLocale(Locale.RU);