最终纪元比输入 [重复] 给出的实际时间提前 3 天

Final epoch is 3 days ahead of the actual time given as input [duplicate]

提问人:Nagesh R Shanbhag 提问时间:3/27/2023 最后编辑:AnonymousNagesh R Shanbhag 更新时间:4/5/2023 访问量:68

问:

我的纪元值比作为输入传递的实际时间提前 3 天。

我有一个日期 2023-03-21T04:34:12.234567800Z,其中 00Z 是偏移量,但是一旦我在 java 中将其转换为纪元,我得到的纪元输出比上面给出的实际日期提前 3 天?关于我们如何为偏移量为 00Z 的日期形成日期格式的任何想法。我使用的是这种格式->“yyyy-MM-dd'T'HH:mm:ss。SSS'Z'”

这是我处理过的代码片段

public class date_to_epoch {

    public static void main(String[] args) {
        //The date format against which the Date will be matched
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
        //Timezone
        df.setTimeZone(TimeZone.getTimeZone("(UTC+05:30) Asia/Kolkata"));
        try {
            @SuppressWarnings("unused")
            String rtValue="2023-03-21T04:34:12.234567800Z";
            Date date = df.parse("2023-03-21T04:34:12.234567800Z");
            SimpleDateFormat utcformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS");
            utcformat.setTimeZone(TimeZone.getTimeZone("UTC"));
            rtValue = utcformat.format(date);
            long epoch = date.getTime(); // timestamp value received in rt field of log to epoch
            String sDatetime = String.valueOf(epoch);
            System.out.println(sDatetime);
            
        } catch (Exception ex) {
        }
        
    }
}

1679607819800--> 这是我得到的纪元,对应于三天前的日期,所以我无法推断出其中的日期格式。在此处输入图像描述

java epoch timezone-offset datetimeoffset datetime-parsesing

评论

2赞 Jon Skeet 3/27/2023
“哪个 00Z 是偏移量”——你确定吗?这看起来像一个具有纳秒精度的时间戳,“Z”表示 UTC。你是如何解析的?“纪元输出”是什么意思?正如 Chaosfire 所说,一个最小的可重复示例是这里的前进方向——但我也强烈建议您重新检查您的假设,即所有“00Z”都是偏移量。
0赞 Nagesh R Shanbhag 3/27/2023
与日期匹配的日期格式 SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSS“);时区 df.setTimeZone(TimeZone.getTimeZone(“(UTC+05:30) Asia/Kolkata”));
0赞 Nagesh R Shanbhag 3/27/2023
除此之外,我还尝试了日期格式为 yyyy-MM-dd'T'HH:mm:ss。SSSSSSSSS'Z',但与提供的日期时间不匹配
4赞 Anonymous 4/4/2023
我强烈建议您不要使用 和 。这些都设计得很差,第一个特别麻烦。而且都早已过时了。此外,从来没有一种方法可以不支持秒的 7 位或 9 位小数,这就是您值不正确的原因。取而代之的是 java.time,modenr Java 日期和时间 API,可以轻松处理您的字符串。 产量为 1 679 373 252 234。SimpleDateFormatDateTimeZoneSimpleDateFormatInstant.parse("2023-03-21T04:34:12.234567800Z").toEpochMilli()
3赞 Anonymous 4/4/2023
其他要点: 1.永远不要吞下例外。空的捕获块是肮脏的禁忌,迟早会给您带来可怕的麻烦。在实验性代码和正在开发的代码中,宜早不宜迟。2. 字符串中的尾随是 UTC 的零偏移量,需要解析为偏移量(您没有), 3. 不是有效的时区,也不会为您提供您认为的时区。使用现代,它会通过异常通知你 - 只是,然后不要吞下异常,就像我说的。ZUTC+05:30) Asia/KolkataZoneId

答: 暂无答案