使用LocalDateTime进行字符串与时间戳的互相转换

时间戳 -> 字符串的三种方式

//第一种:
public static String longToStr(Long timeStamp, String pattern){
   return new SimpleDateFormat(pattern).format(timeStamp);
}

// 第二种:
public static String longToStr(Long timeStamp, String pattern){
    LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeStamp), ZoneOffset.ofHours(8));
    return DateTimeFormatter.ofPattern(pattern).format(localDateTime);
}

// 第三种:
// 定义静态常量
public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

public static String longToStr(Long timeStamp){
    LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(timeStamp/1000L, 0, ZoneOffset.ofHours(8));
    return YYYY_MM_DD_HH_MM_SS_FORMATTER.format(localDateTime);
}
  • 性能方面:3 > 2 > 1
  • 灵活性方面(可自定义pattern):2 = 1 > 3
  • 根据需求使用,如果转换pattern基本固定,推荐使用3, 如果有传入pattern的需要,推荐使用2,任何情况下,不推荐使用1。

字符串 -> 时间戳

// 第一种:
// 定义静态常量:
public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

public static long strToLong(String timeStr){
    TemporalAccessor parse = FORMATTER.parse(timeStr);
    return LocalDateTime.from(parse).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
}

// 第二种:
/**
 * 字符串转时间戳
 * 使用传参样例,patternType传什么值,取决于pattern是否带有时间,patternType传错会报错:
 * strToLong("2022-06-10 09:00:00", "yyyy-MM-dd HH:mm:ss", 1)
 * strToLong("2022-06-10", "yyyy-MM-dd", 2)
 *
 * @param time 时间字符串
 * @param pattern 转换格式
 * @param patternType 转换类型,1代表pattern包含日期+时间,2代表pattern仅包含日期
 * @return
 */
public static long strToLong(String time, String pattern, Integer patternType){
    TemporalAccessor parse = DateTimeFormatter.ofPattern(pattern).parse(time);
    switch (patternType) {
        case 1:
           return LocalDateTime.from(parse).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
        case 2:
            return LocalDate.from(parse).atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
        default:
            return 0;
    }
}

基本概念

  • ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
  • Instant: 用来表示时间线上的一个点(瞬时)
  • LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
  • LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
  • LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的

更多api参考:LocalDateTime用法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值