给定秒内的ISO8601格式[重复]

问题描述 投票:-2回答:3

考虑到自纪元以来的秒数,我如何在ISO8601中获得Java中的字符串?我无法在任何地方找到它。

我希望格式看起来像这样:2000-06-31T19:22:15Z

仅使用日期d =新日期(从我的秒数开始的毫秒数)给我一个1970年的日期,那时我应该在2000年得到一些东西。

java datetime time data-conversion iso8601
3个回答
0
投票

你可能遇到的主要问题是,2000年6月只有30天。这是说而不是使用Date,你可以使用LocalDateTimeLocalDateTime.ofEpochSecond(long, int, ZoneOffset)

long epochSecond = 962392935L;
int nanoOfSecond = 0;
ZoneOffset offset = ZoneOffset.UTC;
LocalDateTime ldt = LocalDateTime.ofEpochSecond(epochSecond, nanoOfSecond, offset);
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").format(ldt));

这应该是你需要看到的

2000-06-30T19:22:15Z

这就像你要求的输出。


1
投票

tl;dr

Instant.ofEpochSeconds( 962_392_935L )  // Convert from a count of whole seconds since 1970-01-01T00:00Z.
       .toString()                      // Generate a string in standard ISO 8601 format.

2000-06-30T19:22:15Z

Details

其他答案是不必要的复杂。

Instant类表示UTC时间轴上的一个点,分辨率为纳秒。

Instant.now()  // Current moment in UTC.

如果自UTC 1970-19-01-010000:00Z 1970年第一时刻的纪元参考日期起有秒数,则只需使用Instant.ofEpochSecond工厂方法。

Instant instant = Instant.ofEpochSeconds( mySeconds ) ;

要以标准ISO格式生成String,只需调用Instant::toString

String output = instant.toString() ;

2000-06-30T19:22:15Z

对于go the other direction,正如Elliott Frisch指出的那样,将你的例子6月31日的错误改为6月30日:

long secondsSinceEpoch = Instant.parse( "2000-06-30T19:22:15Z" ).toEpochSecond() ;  // Gets the number of seconds from the Java epoch of 1970-01-01T00:00:00Z.

962392935

Avoid legacy date-time classes always

不要使用麻烦的旧日期时间类,如Date。它们完全被Java 8及更高版本中内置的java.time类所取代。

Avoid LocalDateTime for your purpose

在本页其他地方看到使用LocalDateTime类的建议是不明智的。

该类故意缺乏任何时区概念或从UTC偏移。因此,此类不代表时间轴上的特定点。您将丢弃有关您的UTC价值的重要信息。


0
投票
    Instant start = Instant.now() ;
    Instant stop = start.plusSeconds( 135L ) ;

    Duration d = Duration.between( start , stop ) ;

    long minutesPart = d.toMinutes(); 
    long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;

    System.out.println( "Interval: " + start + "/" + stop );
    );

我认为这段代码可以帮助你得到这样的东西:2000-06-31T19:22:15Z。

© www.soinside.com 2019 - 2024. All rights reserved.