LocalDateTime使用

开发中常常需要用到时间,随着jdk的发展,对于时间的操作已经摒弃了之前的Date等方法,而是采用了LocalDateTime方法,因为LocalDateTime是线程安全的。

下面我们来介绍一下LocalDateTime的使用。

时间转换

将字符串转换为时间格式

前后端交互的过程中,前端传的是字符串类型,那在进行时间比较之前,我们需要将字符串转为我们的时间格式。

其中DateTimeFormatter是在一种时间格式设置的工具

//将字符串转换为时间格式
@Test
public void testToDate(){
    //时间格式设置
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");
    //将字符串转换为时间
    LocalDateTime localDateTime = LocalDateTime.parse("20230923 23:12", dateTimeFormatter);
    System.out.println("字符串转换为时间:"+localDateTime);
}

运行结果:

将时间转换为字符串

如何将时间转换为字符串呢?同样地,需要先设置一个转换格式。

//将时间转换为字符串
@Test
public void testToString(){
    //时间格式设置
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");
    //获取当前时间
    LocalDateTime now = LocalDateTime.now();
    //将时间转换为字符串
    String nowString = now.format(dateTimeFormatter);
    System.out.println("时间转换为字符串:"+nowString);
}

运行结果:

获取当前时间

//@Test
public void testGetNow(){
    //获取当前时间
    LocalDateTime now = LocalDateTime.now();
    System.out.println("当前时间为:"+now);
}

运行结果:

以上就是获取当前的时间,并且输入的格式是ISO 8601的格式。

计算两个时间的差距

Duration是一种计算时间差的一个类,其中有两个入参,开始时间和结束时间。并且在该类中提供了多种方法,满足我们的需求:

//计算两个时间的差距
@Test
public void testTimeBetween(){
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");
    LocalDateTime parse = LocalDateTime.parse("20230221 21:16", dateTimeFormatter);
    //时间差距
    Duration between = Duration.between(parse,LocalDateTime.now());

    //将时间差转换为以天为单位
    long days = between.toDays();

    //将时间差转为以分钟为单位
    long minutes = between.toMinutes();

    //将时间差转为以小时为单位
    long hours = between.toHours();

    System.out.println(days);
    System.out.println(minutes);
    System.out.println(hours);
}

 计算两个日期的差值

当我们在实际的开发中,只涉及到日期的操作,我们也可以使用DateTimeFormatter进行日期转换。获取今天的日期可以使用:

LocalDate now = LocalDate.now();

但是在计算两个日期的差值是不能使用Duration了需要用到Period。但是这个只会计算出天数位的差值,和年、月没有关系。要计算真正的日期差值,可以使用until。

//计算两个日期的差值
@Test
public void testPeriod(){
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    LocalDate parse = LocalDate.parse("20230121", dateTimeFormatter);
    //时间差距,注意这个只会计算出天数位的查找和月,年没有关系。
    //Period between = Period.between(parse,LocalDate.now());
    //两个日期之间相差了多少天
    //System.out.println(between.getDays());

    //计算两个日期真正相差多少天
    long until = parse.until(LocalDate.now(), ChronoUnit.DAYS);
    System.out.println("相差:"+until);
}

运行结果:

怎样将时间转换为时间戳

我们都知道LocalDateTime是没有带时区的,那我们将它转为时间戳的时候需要带上时区信息。

//将时间转换为时间戳
@Test
public void testToInstant(){
    LocalDateTime now = LocalDateTime.now();
    long l = now.toInstant(ZoneOffset.ofHours(8)).toEpochMilli() / 1000;
    System.out.println("l: " + l);//输出 l: 1677116982

    Instant instant = now.toInstant(ZoneOffset.ofHours(8));
    long epochSecond = instant.getEpochSecond();
    System.out.println("epochSecond:"+epochSecond);//输出 输出 epochSecond: 1677116982

    //将时间戳转换为时间
    LocalDateTime dateTime = LocalDateTime.ofEpochSecond(1677116982L, 0 ,ZoneOffset.ofHours(8));
    System.out.println(dateTime);
}

如上的代码中,toInstant就是将时间转为时间戳的方法,ZoneOffset.ofHours(8)就是时区偏移8小时,就是北京时间。

查看几分钟前的时间

@Test
public void test(){
    //minutes分钟之前的时间
    Integer minutes = 3;
    Instant instant = Instant.now().minus(Duration.ofMinutes(minutes));
    System.out.println(instant.atZone(ZoneId.systemDefault()));
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值