【将时间戳转成任意格式的时间】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

问题背景:

        在解决动态时间格式转化的时候遇到了HH:mm型格式无法转化的问题,大概原因就是SimpleDateFormat在格式化日期的时候只能去尾不能去头,而且该方法线程也不安全,这里推荐使用另一种方法DateTimeFormatter。


提示:以下是本篇文章正文内容,下面案例可供参考

一、用时间戳实例化Instant

这里简单介绍一下Instant:

        Instant是Java 8中新增的日期API,早在JDK1.0时代,JDK就包含了一个与时间相关的java.util.Date类,而因为其本身的缺陷,其大多数方法都在JDK1.1时代被新引入的与时间相关的Calendar类取代。而Calendar类并不比Date类好太多,其本身也有不少问题,并且Calendar类虽然功能更强,其本身线程也是不安全的。

二、具体使用

直接上代码:

Instant        instant        = Instant.ofEpochMilli(1657652580000L);
// 设置偏移量为8,以格林威治时间为基准偏移8为东八区时间
OffsetDateTime    offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
// 此处可以是任意格式,例如:yyyy-MM-dd,yyyy,yyyy-MM,这里使用HH:mm。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm", Locale.CHINA);
// 输出为:03:03
System.out.println(formatter.format(offsetDateTime));

封装成工具类:

/**
 * 将Long型时间戳转成任意格式东八区String型时间
 */
public static String longToAnyStringDate(Long time, String formatStr) {
    Instant                            instant        = Instant.ofEpochMilli(time);
// 设置偏移量为8
    OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
    DateTimeFormatter formatter      = format.DateTimeFormatter.ofPattern(formatStr);
    return formatter.format(offsetDateTime);
}

总结

        时间格式转化方法很多,尽量使用功能更强,线程安全的方法,目前大部分时间格式转化的文章大都比较老,使用的还是线程不安全的SimpleDateFormat或者Calendar。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值