`

Java 中的LocalDateTime 和Date 以及毫秒数转换

 
阅读更多

 

对比组1

1.LocalDateTime ->毫秒数

LocalDateTime start=LocalDateTime.of(2023,2,2,0,0,0);
ZonedDateTime zonedDateTime = start.atZone(ZoneId.of("Asia/Shanghai"));
Instant instant = Instant.from(zonedDateTime);
long milli= instant.toEpochMilli();

2.LocalDateTime->java.util.Date

LocalDateTime start=LocalDateTime.of(2023,2,2,0,0,0);
ZonedDateTime zonedDateTime = start.atZone(ZoneId.of("Asia/Shanghai"));
Instant instant = Instant.from(zonedDateTime);
Date date=Date.from(instant);  //底层代码 new Date(instant.toEpochMilli())

3.对比结果发现

当从LocalDateTime 转换成Instant 以后,
Instant 对象直接toEpochMill() 就可以获取到对应时间的毫秒数
如果要转成Date 类型,直接通过new Date(long mills) 来获得
所以LocalDateTime 转 毫秒和Util.Date 的关键是 转成 Instant
LocalDateTime 转成 Instant 的关键是:构建ZonedDateTime 对象
Instant.from(ZonedDateTime zonedDateTime) :从指定的时间获取一个瞬间

对比组2

1.Date 转LocalDateTime

Date currentDate =new Date();
Instant instant = currentDate.toInstant();// Date的这个toInstant()方法底层是 
//Instant.OfEpochMilli(getTime())
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();

2.毫秒转LocalDateTime

Long ntTime=1675296000000l;
Instant instant=Instant.ofEpochMilli(ntTime);
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime=instant.atZone(zoneId).toLocalDateTime();

3.对比结果

从Date 或者 毫秒转LocalDateTime 的关键也是构建Instant对象,这个瞬间对象
Date.toInstant() Instant.ofEpochMill(ntTime) 分别从Date 和long 构建完Instant 对象,
其中Date.toInstant() 底层也是先获取 date.getTime() ,然后使用Instant.ofEpochMilli(ntTime) 来构建Instant 对象
Instant对象设置了Zone信息以后,可以通过 ZonedDateTime.toLocalDateTime()
得到LocalDateTime
 

附加:从操作系统的纳秒转成LocalDateTime

public static final long TICKS_AT_EPOCH_NT=116444736000000000L;
public static final long TICKS_AT_PER_MILLISECOND=10000L;
public static TimeZone TIME_ZONE=TimeZone.getDefault();

public static LocalDateTime changeNTToLocalDateTime2(Long ntTime) {
    if(Optional.ofNullable(ntTime).isPresent()){
        Calendar calendar = Calendar.getInstance(TIME_ZONE);
        calendar.setTimeInMillis((ntTime-TICKS_AT_EPOCH_NT)/TICKS_AT_PER_MILLISECOND);
        Instant instant = calendar.getTime().toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
        return localDateTime;
    }else{
        return null;
    }
}
分享到:
评论

相关推荐

    java8 localtime 毫秒与时间互转 获取前一天六点钟时间

    java8 localtime 毫秒与时间互转 获取前一天六点钟时间

    date与long型转换工具

    在编程领域,日期和时间的处理是至关重要的。...总之,"date与long型转换工具"是一个实用的辅助工具,简化了Java开发中日期和时间的转换操作,对于需要频繁处理时间数据的项目来说,它的存在大大提高了开发效率。

    Java - DateUtil 日期时间转换工具类

    内容概要:日期时间转换工具类,包括基本的Date类型,String类型,TimeStamp类型,LocalDateTime类型,LocalDate类型之间的互相转换,还提供了许多与时间获取,时间计算有关的方法,如:获取指定日期几天后的日期;...

    Java日期转换

    这篇博客"Java日期转换"探讨了如何在Java中有效地转换和操作日期。Java提供了多种类库来支持日期和时间的操作,包括`java.util.Date`、`java.text.SimpleDateFormat`、`java.time`包中的类等。本文将详细讲解这些类...

    Java 之 Date 和 Calendar 实例

    在Java编程语言中,`Date`和`Calendar`类是处理日期和时间的核心组件。这两个类在不同的Java版本中有着不同的使用方式和功能,对于理解Java时间处理机制至关重要。本篇将深入探讨`Date`和`Calendar`类的实例应用。 ...

    Javautildate与javasqldate区别和转换[文].pdf

    在Java编程语言中,`java.util.Date` 和 `java.sql.Date` 都是处理日期的类,但它们各自有特定的用途和特点。理解这两者的区别对于进行数据库操作和日常日期处理至关重要。 `java.util.Date` 是Java标准库中一个...

    java 操作的日期 date

    在Java编程语言中,日期(Date)操作是常见的任务,特别是在处理日志记录、数据分析、时间戳转换等场景。Java提供了多种方式来处理日期和时间,包括内置的`java.util.Date`类,以及从Java 8开始引入的`java.time`...

    毫秒数转日期.rar

    在Java中,有多种方法可以将毫秒数转换为日期,反之亦然。 首先,我们需要了解`java.util.Date`类。这个类在Java 8之前被广泛使用,它有一个构造函数`Date(long time)`,接受一个以毫秒为单位的时间值,创建一个...

    JAVA Calendar,Date类详解

    `Date`类是Java早期版本中用于表示日期和时间的类,它提供了一个时间戳,表示自1970年1月1日(格林尼治标准时间)以来的毫秒数。虽然`Date`类在Java 8之后已经不推荐直接使用,但它仍然是许多遗留代码的基础。`Date`...

    Date、String、Calendar之间的转换_java编程_

    `java.util.Date`是Java中的基础日期类,它表示自1970年1月1日(UTC)0时0分0秒以来的毫秒数。然而,`Date`对象本身并不直接支持格式化或解析,因此通常需要与`SimpleDateFormat`类配合使用来完成字符串与日期之间的...

    Java基础之Date和Calendar类的使用方法

    Java中的Date和Calendar类是处理日期和时间的核心组件。Date类主要用于表示特定的瞬间,精确到毫秒。在早期版本的Java中,Date类的设计受到批评,因为它的API不直观且容易导致错误。为了解决这些问题,大部分日期和...

    java时间的转换

    在实际开发中,Java 8引入了`java.time`包,其中的`LocalDate`、`LocalDateTime`和`DateTimeFormatter`等类提供了更为强大和易用的日期时间处理功能。对于新项目,推荐使用`java.time`包中的类,因为它们提供了更好...

    java Date 处理

    `Date`类主要包含了日期和时间信息,但它默认表示的是从1970年1月1日00:00:00 UTC(协调世界时)到当前时刻的毫秒数。以下是一些关于`java.util.Date`的知识点: 1. **创建Date对象**: - 可以通过构造函数直接...

    java date

    在`java.util.Date`类中,它表示的是从1970年1月1日00:00:00 GMT(格林尼治标准时间)到当前时刻的毫秒数。这个类的主要方法包括`getDate()`, `getMonth()`, `getFullYear()`等,但这些方法已被标记为过时。使用它们...

    Java 之 Date 和 Calendar

    在`java.util`包下,`Date`对象存储的是自1970年1月1日00:00:00 GMT(格林尼治标准时间)以来的毫秒数。你可以通过`new Date()`创建一个表示当前时间的`Date`对象,或者指定一个特定的时间戳。 ```java Date ...

    java--时间戳与时间转换工具

    下面将详细讨论如何在Java中进行时间戳与时间的相互转换,以及如何利用提供的源码创建一个简单的转换工具。 1. **时间戳到日期转换**: Java中可以使用`java.util.Date`类的构造函数将时间戳转换为日期对象: ```...

    JAVA System、Math、Date、DateFormat、Calendar

    尽管如此,`Date`在旧项目中仍然常见,它的`new Date()`构造器可以创建当前日期,`date.getTime()`返回自1970年1月1日以来的毫秒数。 `DateFormat`是格式化日期和时间的抽象类,提供了多种日期和时间格式化风格,如...

    java中获取系统时间

    ### Java中获取系统时间 ...此外,随着Java版本的不断更新,如在Java 8及更高版本中,还可以使用`java.time`包中的新API,例如`LocalDateTime`、`Instant`等类,它们提供了更加强大和直观的日期时间处理能力。

    如何在 Java 中为日期增加一天.docx

    每种日期都由自 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)以来的毫秒数表示,所以增加一天的毫秒数即可实现目标。如下所示: ```java import java.util.Date; public class SimpleTesting { public static...

    java_时间戳与Date_相互转化的实现代码

    - `Date`类在Java 8之后已经被`java.time`包中的`LocalDateTime`等新类所取代,但`Date`和时间戳的转换仍然是常见的需求,尤其是在兼容旧代码或与旧API交互时。 5. **Java 8及以后的日期时间处理** Java 8引入了`...

Global site tag (gtag.js) - Google Analytics