我有一个外部API,它返回long秒的日期,表示为自纪元开始以来的毫秒数.

使用老式的JavaAPI,我只需要用

Date myDate = new Date(startDateLong)

Java8的LocalDate/LocalDateTime类中的类似功能是什么?

我有兴趣将我当前当地时区内由long表示的时间点转换为LocalDate.

推荐答案

如果您有自历元起的毫秒数,并且希望使用当前本地时区将其转换为本地日期,则可以使用

LocalDate date =
    Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();

但请记住,即使是系统的默认时区也可能会更改,因此相同的long值可能会在后续运行中产生不同的结果,即使在同一台计算机上也是如此.

此外,请记住,与java.util.Date不同,LocalDate真正代表的是一个日期,而不是一个日期和时间.

否则,您可以使用LocalDateTime:

LocalDateTime date =
    LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());

Java相关问答推荐

Java中Stream(java.util.stream)和linkedList数据 struct 之间是什么关系?

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

如何调整工作时间日历中的时间

查找剩余的枚举

解释左移在Java中的工作原理

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

Java-动态绑定-问题-了解

如何在 spring 数据的MongoDB派生查询方法中使用$EXISTS

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

错误:不兼容的类型:Double不能转换为Float

FETCH类型设置为LAZY,但它仍会发送第二个请求

try 在两个不同数组的数字之间求平均值

Android Studio模拟器没有互联网

如何根据配置动态创建N个bean

如何在不作为类出现的表上执行原生查询?

对角线填充二维数组

没有Tomcat,IntelliJ如何在本地运行API?

将BlockingQueue+守护程序线程替换为执行器

Bash数组的单引号元素并使用空格连接