简单日期格式忽略设置时区调用



我有以下代码:

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

最新更新