ISO8601格式,java给定秒数
在ISO8601中,如果给定从纪元开始的秒数,如何获取Java中的字符串?我在任何地方都找不到它 我希望格式如下所示: 2000-06-31T19:22:15Z 使用just Date d=new Date(从我的秒数算起的毫秒数)可以给我一个1970年的日期,那时我应该在2000年得到一些东西ISO8601格式,java给定秒数,java,datetime,time,data-conversion,iso8601,Java,Datetime,Time,Data Conversion,Iso8601,在ISO8601中,如果给定从纪元开始的秒数,如何获取Java中的字符串?我在任何地方都找不到它 我希望格式如下所示: 2000-06-31T19:22:15Z 使用just Date d=new Date(从我的秒数算起的毫秒数)可以给我一个1970年的日期,那时我应该在2000年得到一些东西 Instant start = Instant.now() ; Instant stop = start.plusSeconds( 135L ) ; Duration d =
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-06-31T19:22:15Z。您可能遇到的主要问题是,2000年6月只有30天。也就是说,不用
Date
,您可以将LocalDateTime
与类似的
这应该是你需要看到的全部
2000-06-30T19:22:15Z
这与您要求的输出类似。您可能遇到的主要问题是,2000年6月只有30天。也就是说,不用
Date
,您可以将LocalDateTime
与类似的
这应该是你需要看到的全部
2000-06-30T19:22:15Z
这与您请求的输出类似。tl;博士
2000-06-30T19:22:15Z
细节
其他答案毫无必要地复杂
该类以UTC表示时间线上的一个点,分辨率为纳秒
Instant.now() // Current moment in UTC.
如果在UTC 1970-01-01T00:00Z的1970年第一个时刻的历元参考日期后有秒数,则只需使用Instant.ofEpochSecond
工厂方法即可
Instant instant = Instant.ofEpochSeconds( mySeconds ) ;
要生成标准ISO格式的字符串,只需调用Instant::toString
String output = instant.toString() ;
2000-06-30T19:22:15Z
正如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
始终避免遗留日期时间类
不要使用麻烦的旧日期时间类,例如date
。它们完全被java 8和更高版本中内置的java.time类所取代
出于您的目的,避免使用LocalDateTime
本页其他地方关于使用LocalDateTime
类的建议是不明智的
该类故意缺乏时区或UTC偏移的概念。因此,此类并不表示时间线上的特定点。您将丢弃有关UTC价值的重要信息 tl;博士
2000-06-30T19:22:15Z
细节
其他答案毫无必要地复杂
该类以UTC表示时间线上的一个点,分辨率为纳秒
Instant.now() // Current moment in UTC.
如果在UTC 1970-01-01T00:00Z的1970年第一个时刻的历元参考日期后有秒数,则只需使用Instant.ofEpochSecond
工厂方法即可
Instant instant = Instant.ofEpochSeconds( mySeconds ) ;
要生成标准ISO格式的字符串,只需调用Instant::toString
String output = instant.toString() ;
2000-06-30T19:22:15Z
正如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
始终避免遗留日期时间类
不要使用麻烦的旧日期时间类,例如date
。它们完全被java 8和更高版本中内置的java.time类所取代
出于您的目的,避免使用LocalDateTime
本页其他地方关于使用LocalDateTime
类的建议是不明智的
该类故意缺乏时区或UTC偏移的概念。因此,此类并不表示时间线上的特定点。您将丢弃有关UTC价值的重要信息 向我们展示您用于从秒数中获取毫秒数的确切内容。
DateTimeFormatter
内置了对ISO8601
的支持-您只需将秒数转换为毫秒,用LocalDateTime
包装即可快速获得好答案,最好的方法是在询问之前进行搜索。你在1个问题中问了2个问题,每个问题都被ben问了很多次并回答了很多次。(1) 如何转换自eopch以来的秒数?例如,见。(2) 如何格式化为ISO-8601?例如,请参阅向我们展示您用于从秒数中获取毫秒数的确切内容。DateTimeFormatter
内置了对ISO8601
的支持-您只需将时间从秒数转换为毫秒,用LocalDateTime
包装,快速获得好答案的最佳方法是在询问之前进行搜索。你在1个问题中问了2个问题,每个问题都被ben问了很多次并回答了很多次。(1) 如何转换自eopch以来的秒数?例如,见。(2) 如何格式化为ISO-8601?例如,请参见您仅仅依赖于即时
字段的内部表示,随着时间的推移,该字段可能不可靠-最好使用日期时间格式
classI没有得到它,@MadProgrammer?被记录为“使用ISO-8601表示法生成此瞬间的字符串表示法”。它不是内部表示法。虽然代码做了一些问题中没有要求的事情。是的,从技术上讲这是正确的,但我仍然认为DateTimeFormatter(使用预定义实例或自定义实例之一)这将是一个更有用、更可靠的解决方案-这只是我的观点,你只是依赖于即时
字段的内部表示,随着时间的推移,它可能不可靠-最好使用日期时间格式
classI没有得到,MadProgrammer?被记录为“使用ISO-8601表示法生成此瞬间的字符串表示法”。它不是内部表示法。虽然代码做了一些问题中没有要求的事情。是的,从技术上讲这是正确的,但我仍然认为DateTimeFormatter(使用预定义实例或自定义实例)将是一个更有用、更可靠的解决方案-这正是我的观点难以置信,Elliott!谢谢:)你不需要一个明确的fo