java 秒内的 ISO8601 格式
ISO8601 format in java given seconds
如何在 ISO8601 中获取 Java 中的字符串,给定自纪元以来的秒数?我在任何地方都找不到它。
我希望格式如下所示:
2000-06-31T19:22:15Z
仅使用 Date d = new Date(# of milliseconds from my # of seconds)给我一个 1970 年的日期,而我应该在 2000 年得到一些东西。
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。
您可能遇到的主要问题是 2000 年 6 月只有 30 天。话虽这么说,而不是使用 Date
,您可以使用 LocalDateTime
和 LocalDateTime.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
这是喜欢您请求的输出。
tl;博士
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
详情
其他答案不必要地复杂。
Instant
class 表示 UTC 时间轴上的一个点,分辨率为纳秒。
Instant.now() // Current moment in UTC.
如果您有自 UTC 1970 年第一时刻的纪元参考日期 1970-01-01T00:00Z 以来的秒数,则只需使用 Instant.ofEpochSecond
工厂方法。
Instant instant = Instant.ofEpochSeconds( mySeconds ) ;
要生成标准 ISO 格式的字符串,只需调用 Instant::toString
。
String output = instant.toString() ;
2000-06-30T19:22:15Z
至 go the other direction,同时将您示例的 6 月 31 日错误更正为 6 月 30 日,正如 Elliott Frisch 所指出的:
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
避免遗留日期时间class总是
不要使用麻烦的旧日期时间 classes,例如 Date
。它们完全被 java.time class 内置于 Java 8 及更高版本中。
为了你的目的避免LocalDateTime
在本页其他地方看到的使用 LocalDateTime
class 的建议是不明智的。
class 故意缺少任何时区或与 UTC 的偏移量的概念。因此,这个 class 而不是 代表时间轴上的特定点。您将丢弃有关您在 UTC 中的价值的重要信息。
如何在 ISO8601 中获取 Java 中的字符串,给定自纪元以来的秒数?我在任何地方都找不到它。
我希望格式如下所示: 2000-06-31T19:22:15Z
仅使用 Date d = new Date(# of milliseconds from my # of seconds)给我一个 1970 年的日期,而我应该在 2000 年得到一些东西。
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。
您可能遇到的主要问题是 2000 年 6 月只有 30 天。话虽这么说,而不是使用 Date
,您可以使用 LocalDateTime
和 LocalDateTime.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
这是喜欢您请求的输出。
tl;博士
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
详情
其他答案不必要地复杂。
Instant
class 表示 UTC 时间轴上的一个点,分辨率为纳秒。
Instant.now() // Current moment in UTC.
如果您有自 UTC 1970 年第一时刻的纪元参考日期 1970-01-01T00:00Z 以来的秒数,则只需使用 Instant.ofEpochSecond
工厂方法。
Instant instant = Instant.ofEpochSeconds( mySeconds ) ;
要生成标准 ISO 格式的字符串,只需调用 Instant::toString
。
String output = instant.toString() ;
2000-06-30T19:22:15Z
至 go the other direction,同时将您示例的 6 月 31 日错误更正为 6 月 30 日,正如 Elliott Frisch 所指出的:
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
避免遗留日期时间class总是
不要使用麻烦的旧日期时间 classes,例如 Date
。它们完全被 java.time class 内置于 Java 8 及更高版本中。
为了你的目的避免LocalDateTime
在本页其他地方看到的使用 LocalDateTime
class 的建议是不明智的。
class 故意缺少任何时区或与 UTC 的偏移量的概念。因此,这个 class 而不是 代表时间轴上的特定点。您将丢弃有关您在 UTC 中的价值的重要信息。