【问题标题】:ZonedDateTime.ofInstant not Showing secondsZonedDateTime.ofInstant 不显示秒
【发布时间】:2022-02-02 02:25:46
【问题描述】:

我正在尝试使用 ZonedDateTime.ofInstant 获取时间,给出一个特定的日期时间,但是我注意到在某些情况下给出的结果并没有包含秒数。 代表我正在处理的情况的代码示例

import java.time.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
  
        
        // create a long variable for milliseconds
        //this is the same as "2022-01-31T00:00:00.00Z"
        long milliseconds1  = 1643587200000L;
        long milliseconds2  = 1643587201000L;
            

        // get Instant using ofEpochMilli() method
        Instant instant1
            = Instant.ofEpochMilli(milliseconds1); 
        // create Instant object
        Instant instant2
            = Instant.ofEpochMilli(milliseconds2);
  
        // create a ZonID
        ZoneId zone = ZoneId.of("Europe/Lisbon");
  
        // apply ofInstant method
        // of ZonedDateTime class
        ZonedDateTime zt1 = ZonedDateTime
                               .ofInstant(instant1, zone);
        ZonedDateTime zt2 = ZonedDateTime
                                .ofInstant(instant2, zone);
  
        // print the result
        System.out.println("ZonedDateTime is " + zt1);
        System.out.println("ZonedDateTime is " + zt2);
    }
}

这段代码执行的结果如下:

ZonedDateTime is 2022-01-31T00:00Z[Europe/Lisbon]
ZonedDateTime is 2022-01-31T00:00:01Z[Europe/Lisbon]

我需要获取第一个结果中未显示的秒数,但我不明白为什么它没有显示 ZonedDateTime.ofInstant 是否有理由不提供完整时间,或者是否有其他方法可以获取 YYYY-MM-DD:HH:MM:SS 中特定时区的时间?

【问题讨论】:

标签: java datetime


【解决方案1】:

您只是使用默认的toString() 实现,而后者又使用默认的LocalDateTime.toString() 实现,记录为:

输出将是以下 ISO-8601 格式之一:

  • uuuu-MM-dd'T'HH:mm
  • uuuu-MM-dd'T'HH:mm:ss
  • uuuu-MM-dd'T'HH:mm:ss.SSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS

所使用的格式将是最短的输出时间的完整值,其中省略的部分被暗示为零。

如果您想要一个 非默认 格式,这听起来像您所做的那样,您需要使用 DateTimeFormatter。我怀疑 DateTimeFormatter.ISO_ZONED_DATE_TIME 可以满足您的要求 - 但如果没有,只需构建一个具有您想要的确切格式的文件。

示例代码:

import java.time.*;
import java.time.format.*;

public class Test {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochMilli(1643587200000L);
        ZoneId zone = ZoneId.of("Europe/Lisbon");
        ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, zone);
        DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
        System.out.println(formatter.format(zdt));
    }
}

输出:

2022-01-31T00:00:00Z[Europe/Lisbon]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 2020-06-16
    • 2016-04-23
    • 2012-12-16
    • 1970-01-01
    • 2011-03-27
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多