为什么使用SimpleTimeZone时Java的SimpleDateFormat从我的UTC日期减去1秒

josketres:

有人可以解释为什么在使用SimpleTimeZone设置时区时,SimpleDateFormat减去我的解析日期1秒吗?

这是jdk的错误吗?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.SimpleTimeZone;
import java.util.TimeZone;

public class SimpleDateFormatTest {

    public static void main(String[] args) throws ParseException {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

        format.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(format.parse("2016-02-24T17:31:00Z")); 
        // prints Wed Feb 24 17:31:00 UTC 2016

        format.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
        System.out.println(format.parse("2016-02-24T17:31:00Z")); 
        // Wed Feb 24 17:30:59 UTC 2016
    }

}
怀疑论者:

您使用了不正确的构造函数。

的构造函数SimpleTimeZone定义为:

public SimpleTimeZone(int rawOffset, String ID)

构造一个SimpleTimeZone,其给定的基准时区与GMT的偏移量以及时区ID没有夏令时时间表。

参数:

rawOffset -与GMT的基本时区偏移量(以毫秒为单位)。

ID -赋予该实例的时区名称。

因此,构造函数的第一个参数是您要创建的时区与GMT的时差(以毫秒为单位)。

没有理由使用任何常量STANDARD_TIMEUTC_TIME或者WALL_TIME在这里。这不是使用它们的地方。但是,由于这些常量的类型为int,而rawOffset参数的类型为int,因此Java不会阻止您将这些常量错误地传递给构造函数。

在Java源代码中,此常量定义为:

public static final int UTC_TIME = 2;

所以打电话时你实际上在做什么

new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC")

说“请创建一个距格林尼治标准时间2毫秒的时区,并将其称为'UTC'”。我很确定这不是您要实现的目标。这是一个自定义时区,与时区略有不同UTC,并且此差异在输出中四舍五入至整秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么使用SimpleDateFormat从字符串中解析日期时得到错误的结果?(Java)

为什么python datetime在减去两个日期时不给出负秒和小时?

为什么在使用SimpleDateFormat格式化日期然后解析日期时出现ParseException?

使用SimpleDateFormat以UTC获取日期

从UTC时间戳转换时,为什么我总是得到错误的日期/时间?

为什么在Swift中,当我从Double转换为Int时,它减去1?

Java / Kotlin:为什么Jackson解析日期与SimpleDateFormat不同?

为什么我的tempmute命令在告诉我10秒钟时将人们静音1秒钟?

为什么转换后从我的DateTime中减去1天?

为什么我从偶数位置的元素中减去 1?我只需要奇数位置(奇数索引)Java

为什么在我仅给出值1时我的日期增加2天

java-使用SimpleDateFormat时无法解析的日期

为什么在使用ofstream时我的NSString变量输出“ 1”?

为什么在使用 request 时解析我的日期成功,但在使用 reqwests 时失败?

从日期VBA减去秒

为什么当我使用 time.sleep(0.5) 而不是只有 1 个函数时,everythin 会休眠 0.5 秒?

为什么SimpleDateFormat解析错误的日期?

为什么SimpleDateFormat更改日期?

为什么使用Java SimpleDateFormat可以节省数月?

为什么我的程序不会延迟1秒?

为什么在Travis CI测试中我的日期克隆会关闭1小时

为什么减去两个日期会给我多一个小时?

日期减去,为什么我在Rebol / Red中没有得到hh:mm:ss?

为什么我不能添加或减去两个日期时间?

使用日期值时,为什么IIF和ISNULL的返回结果不符合我的期望?

当我每隔x秒使用NSTimer运行函数时,为什么会收到此错误消息?

Joda Time从MutableDateTime实例中减去24小时,我想知道为什么

为什么减去指针时我得到一个负数?

为什么我的1000毫秒超时功能需要比1秒功能更长的时间?