Java GET返回日期为13位数字

时间:2018-02-27 15:00:33

标签: java json spring date

我的网络应用程序返回一个13位数的日期。

如何将其格式化为在JSON响应中返回的正确日期。在我的函数中它只返回整个DTO。

3 个答案:

答案 0 :(得分:2)

TL;博士

Instant.ofEpochMilli( 1_475_166_540_000L )
       .toString()

或者...

Instant.ofEpochMilli( Long.parseLong( "1475166540000" ) )
       .toString()

详细

Instant表示UTC时刻,分辨率为纳秒。

该类可以从UTC 1970-01-01T00:00Z的1970年第一时刻的纪元参考解析毫秒数。

Instant instant = Instant.ofEpochMilli( 1_475_166_540_000L ) ;

顺便说一句,整数秒的计数,Instant.ofEpochSecond( mySeconds )

如果输入为String,则解析为long

Instant instant = Instant.ofEpochMilli( Long.parseLong( "1475166540000" ) ) ;

要以标准ISO 8601格式生成字符串,请致电toString

String output = instant.toString() ;
  

2016-09-29T16:29:00Z

最后的Z是“Zulu”的缩写,意思是UTC。

  

如何将其格式化为正确的日期

没有“适当的约会”这样的事情。每种文化都有自己的文本显示日期时间值的方式。

要向用户进行本地化显示,请使用DateTimeFormatter及其ofLocalized…方法。

String output = instant.atZone( ZoneId.of( "Africa/Tunis" ) ).format( DateTimeFormatter.ofLocalizedDateTime​( FormatStyle.FULL ).withLocale( Locale.JAPAN ) ) ;  // Use Japanese formatting to display a moment in Tunisia wall-clock time.
  

2016年9月29日木曜日17时29分00秒中央ヨーロッパ标准时

要在JSON等系统之间交换数据,仅使用标准的ISO 8601格式。它们实用,设计明确,易于通过机器解析,并且易于被不同文化的人阅读。在解析/生成字符串时,默认情况下,Java中内置的 java.time 类使用这些标准格式。因此无需指定格式化模式。

String output = instant.toString() ;
  

2016-09-29T16:29:00Z

Instant instant = Instant.parse( "2016-09-29T16:29:00Z" ) ;
long millisSinceEpoch = instant.toEpochMilli() ;
  

1475166540000

避免遗留日期时间类

切勿使用示例代码中看到的麻烦的Date / Calendar类。它们现在是遗留的,完全由 java.time 类取代。

要与尚未更新到java.time的旧代码互操作,您可以来回转换。调用添加到旧类的新转换方法。

Date d = Date.from( instant ) ;  // Don’t do this unless forced to inter-operate with old code not yet updated to java.time classes.

答案 1 :(得分:1)

如果您使用的是Java 8,则可以使用java.time库:

String date = LocalDateTime.ofInstant(
        Instant.ofEpochMilli(Long.valueOf("1475166540000")), ZoneId.systemDefault()
).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

System.out.println(date);// 2016-09-29 17:29:00

答案 2 :(得分:1)

这个13位数是一个Unix时间戳:https://en.wikipedia.org/wiki/Unix_time 它是1970年1月1日午夜以UTC为单位的毫秒数。

要将其转换为Date,只需执行以下操作:

Date date = new Date(Long.parseLong("1475166540000"));

如果您使用的是Java 8或更高版本,请参阅其他答案