Java-时间格式化,转换时间戳

LocalDateTime

LocalDateTime作为java8新加的时间类型,也是后面开发中常用的时间类型。

作为时间类型,最关注的有一下几点:

  • 获取当前时间
  • 获取指定时间
  • 获取零点
  • 时间格式化
  • 时间转时间戳
  • 字符串转换成时间戳
  • 时间戳转时间
  • 时间比较
  • 时间加减

这些点通过LocalDateTime来操作,都会比较简单

获取当前时间

LocalDateTime类型

LocalDateTime time = LocalDateTime.now();

Date类型

Date date = new Date();

获取指定时间

LocalDateTime类型

  • 通过原来的date和dateTime类型来生成
  • 通过传年月日时分秒生成
LocalDateTime time = LocalDateTime.of(2022,11,30,6,6,6);

Date类型

原来Date类的方式。比较奇怪,他的年份会+1900,所以2022年就得是122,月份也会+1,所以11月就是10.但是这个方法呢后面会被删除,已经被标记为弃用了,使用Calendar代替。

Date date = new Date(122,10,30,6,6,6);

看一下Calendar的使用。这个年份就正常了,是2022,但是月份还是会+1.

Calendar calendar = Calendar.getInstance();
calendar.set(2022,10,30,6,6,6);
Date date = calendar.getTime();

获取零点

LocalDateTime zeroLocalDateTime = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
String format = zeroLocalDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

时间格式化

时间格式化都是通过format函数,需要传一个DateTimeFormatter对象进去,可以通过DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")来生成自己想要的格式。
DateTimeFormatter类里面也有一些定义好的格式可以直接用,除了下面列出的还有一些其他的,感兴趣可以看一下,不过我觉得都没啥用。

  • ISO_DATE_TIME 2011-12-03T10:15:30
  • ISO_OFFSET_DATE_TIME 2011-12-03T10:15:30+01:00
  • ISO_LOCAL_DATE_TIME 2011-12-03T10:15:30
String result = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

Date的格式化。这个需要借用SimpleDateFormat类来完成格式化。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result= format.format(date);

时间转时间戳

时间转时间戳分为两种,一种LocalDateTime类型的时间需要转换成秒或者毫秒的时间戳,另一种是Date类型。

时间转换秒级时间戳

LocalDateTime类型

只需要直接用toEpochSecond方法就可以了。

LocalDateTime time = LocalDateTime.now();
time.toEpochSecond(ZoneOffset.ofHours(8));
Date类型

Date类型没有办法直接获取秒级时间戳,只能获取毫秒级再转秒。

时间转换毫秒级时间戳

LocalDateTime类型

转换毫秒需要先转换成instant对象,然后才能转换成毫秒级时间戳。

LocalDateTime time = LocalDateTime.now();
time.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
Date类型

Date获取毫秒就很简单了。

Date date = new Date();
date.getTime();

字符串转换成时间戳

时间转时间戳分为两种,除了上面的,还有一种是有一个格式化好的字符串,比如2022-12-18 10:00:00这种,但是这个是字符串并不是时间类型。所以要先转换成LocalDateTime类型,然后就可以转换成时间戳了。
其实就是上面格式化的一种反向操作。使用parse方法就可以了。

LocalDateTime类型

LocalDateTime.parse("2022-12-18 10:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDate.parse("2022-12-18", DateTimeFormatter.ofPattern("yyyy-MM-dd"));

Date类型

Date类型的字符串转时间戳也是通过SimpleDateFormat类来完成。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2022-12-18 10:00:00");

时间戳转时间

那如果我们现在转换成时间戳以后又想转换成时间呢?也可以通过instant对象来做到。

秒时间戳转时间

LocalDateTime类型

Instant.ofEpochMilli(1671365543)是将一个秒时间戳转换成instant对象。和上面的区别就是使用的是ofEpochMilli方法。

LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(1671365543), ZoneOffset.ofHours(8));

Date类型

Date类不支持秒,只能把秒转成毫秒在转时间戳。

毫秒时间戳转时间

LocalDateTime类型

Instant.ofEpochSecond(1671365543834)是将一个毫秒时间戳转换成一个instant对象。在通过ofInstant方法就可以将instant对象转换成LocalDateTime对象了。

LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1669759566000L), ZoneOffset.ofHours(8));
Date类型
Date date = new Date(1669759566000L);

时间比较

LocalDateTime类型

通过compareTo方法可以进行时间的一个比较大小。如果大于会返回1,小于返回-1,等于返回0。

LocalDateTime time = LocalDateTime.now();
time.compareTo(LocalDateTime.now());

Date类型

Date也是通过compareTo方法进行比较

Date date = new Date(1669759566000L);
date.compareTo(new Date());

时间加减

LocalDateTime类型

如果加上几天,就是plusDays。加几个小时就是plusHours。当然也可以使用plus。

LocalDateTime time = LocalDateTime.now();
LocalDateTime time1 = time.plusDays(1).plusHours(1);

如果减去几天就是minusDays.减去几个小时就是minusHours。当然也可以使用minus。

LocalDateTime time = LocalDateTime.now();
LocalDateTime time1 = time.minusDays(1).minusHours(1);

Date类型

Date类不支持时间加减,只能通过Calendar类实现。

Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//加
calendar.add(Calendar.DAY_OF_MONTH, 1);
//减去
calendar.add(Calendar.DAY_OF_MONTH, -1);

时间格式在入参出参中的使用

入参的时候需要通过JsonFormat注解来指定需要的是字符串类型和对应的时间格式。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private LocalDate date;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;

出参的时候就很简单了,因为只是返回了一个字符串。

private String time;
  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值