LocalDateTime及时间戳相关操作

Java LocalDateTime

文章目录

  • Java LocalDateTime
    • 获取当前时间
    • 获取当前时间戳,时间戳与LocalDateTime互转
      • Instant类
      • Instant类时间戳获取
      • LocalDateTime时间戳获取及转换
    • LocalDateTime与String互转
    • Date与LocalDateTime互转
    • LocalDateTime时间比较
    • LocalDateTime时间加减

获取当前时间

LocalDateTime本身不包含时区信息,它存储的是年、月、日、时分秒,纳秒这样的数字。
如果只是为了获取当前系统所在默认时区的一个本地时间,那么用LocalDateTime.now()无参数构造方法即可,而如果我想知道现在在UTC时区那里本地显示的是什么时间,就可以用LocalDateTime.now(ZoneOffset.UTC)这个构造方法了。

在构造后,LocalDateTime同样不携带时区信息,仍然只是表示一个显示时间而已。

//获取当前时间
//假如这个时间是:2023-11-23T16:00:51.589
LocalDateTime dtLocal = LocalDateTime.now();

//那么这个时间就会存储:2023-11-23T08:00:51.589,提前8个小时
LocalDateTime dtUtc = LocalDateTime.now(ZoneOffset.UTC);

获取当前时间戳,时间戳与LocalDateTime互转

Instant类

Instant 类 是Java8 中补充的一个 时间戳类。
相较于 System.currentTimeMillis()获取到【毫秒】,Instant 可以更为精确的获取到【纳秒】。

同时,Instant 类还是 Java8 中 提供的新的 日期时间类LocalDateTime 与 原来的 java.util.Date 类之间转换的桥梁。

Instant类时间戳获取

Instant now = Instant.now();
System.out.println(now);
System.out.println("纪元秒 : "+ now.getEpochSecond());
System.out.println("毫  秒 : "+ now.toEpochMilli());
System.out.println("纳  秒 : "+ now.getNano());
// 等同now.toEpochMilli()
System.out.println("时间戳毫秒 : "+ System.currentTimeMillis());
// Instant时间戳转LocalDateTime,注意ZoneId.systemDefault()表示系统时区
// 时间戳转Instant
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

LocalDateTime时间戳获取及转换

//获取时间戳秒数
Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
//获取时间戳毫秒数
Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();

//时间戳转LocalDateTime
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

long timestamp = System.currentTimeMillis();
LocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();

Long time = System.currentTimeMillis();  //获取当前时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = format.format(time);//注意这里返回的是string类型

LocalDateTime与String互转

//时间转字符串格式化
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
 String dateTime = LocalDateTime.now(ZoneOffset.of("+8")).format(formatter);

//字符串转时间
String dateTimeStr = "2018-07-28 14:11:15";
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, df);

Date与LocalDateTime互转

    //将java.util.Date 转换为java8 的java.time.LocalDateTime,默认时区为东8区
    public static LocalDateTime dateConvertToLocalDateTime(Date date) {
        return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
    }

    //将java8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东8区
    public static Date localDateTimeConvertToDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
    }

    /**
     * 测试转换是否正确
     */
    @Test
    public void testDateConvertToLocalDateTime() {
        Date date = DateUtils.parseDate("2018-08-01 21:22:22", DateUtils.DATE_YMDHMS);
        LocalDateTime localDateTime = DateUtils.dateConvertToLocalDateTime(date);
        Long localDateTimeSecond = localDateTime.toEpochSecond(ZoneOffset.of("+8"));
        Long dateSecond = date.toInstant().atOffset(ZoneOffset.of("+8")).toEpochSecond();
        Assert.assertTrue(dateSecond.equals(localDateTimeSecond));
    }

LocalDateTime时间比较

public static void main(String[] args) {
        //获取当前时间
        LocalDateTime nowTime= LocalDateTime.now();
        //自定义时间
        LocalDateTime endTime = LocalDateTime.of(2023, 10, 23, 14, 10, 10);
        //比较  如今的时间 在 设定的时间 之后  返回的类型是Boolean类型
        System.out.println(nowTime.isAfter(endTime));
        //比较   如今的时间 在 设定的时间 之前  返回的类型是Boolean类型
        System.out.println(nowTime.isBefore(endTime));
        //比较   如今的时间 和 设定的时候  相等  返回类型是Boolean类型
        System.out.println(nowTime.equals(endTime));
				//Returns: the comparator value, negative if less, positive if greater
				//nowTime>endTime return 1 else -1
				System.out.println(nowTime.compareTo(endTime));
}

LocalDateTime时间加减

public static void main(String[] args) {
        //获取当前时间
        LocalDateTime nowTime= LocalDateTime.now();
        // plus传入正数为加,负数为减
				nowTime.plusYears(1);
        nowTime.plusDays(1);
        nowTime.plusMonths(1);
        nowTime.plusMinutes(1);
        nowTime.plusSeconds(1);
				// minus传入正数为减,负数为加
				nowTime.minusDays(1);
				// ...       
}

你可能感兴趣的:(java,spring)