说说字符串转 OffSetDateTime 你真的会用吗

 更新时间:2021年08月04日 14:37:09   作者:PostTruth  
这篇文章主要介绍了字符串转 OffSetDateTime 你真的会用吗?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

字符串转 OffSetDateTime 你真的会用

要创建OffsetDateTime ,需要日期 (日,月和年), 时间 (小时,分钟,秒和纳秒)和偏移量 (与UTC的差异)。

如果输入只有日期,将会报错.

如果只有 日期 小时,分钟和秒,也会报错.

因此必须构建其余的,或者假设它们的默认值。

下面是我写好的工具类,拿去用吧:

public class OffSetDateTimeConverter {
    private static DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
            .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
            .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
            .parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
            .toFormatter();
    private static DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss")
            .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
            .parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
            .toFormatter();
    public static OffsetDateTime convertDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        return OffsetDateTime.parse(date, DATE_FORMAT);
    }
    public static OffsetDateTime convertDateTime(String dateTime) {
        if (StringUtils.isBlank(dateTime)) {
            return null;
        }
        return OffsetDateTime.parse(dateTime, DATE_TIME_FORMAT);
    }
}

上面的工具类保存到数据库会报错, 用下面这个吧

public class OffSetDateTimeConverter {
    /**
     * yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static OffsetDateTime convertDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        return LocalDate.parse(date, ISO_LOCAL_DATE).atTime(LocalTime.MIN).atZone(systemDefault()).toOffsetDateTime();
    }
    /**
     * "yyyy-MM-dd HH:mm:ss"
     *
     * @param dateTime
     * @return
     */
    public static OffsetDateTime convertDateTime(String dateTime) {
        if (StringUtils.isBlank(dateTime)) {
            return null;
        }
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.parse(dateTime, dtf);
        return OffsetDateTime.of(localDateTime, ZoneOffset.UTC);
    }
}

又来更新了,上面方式会有时区问题,用下面的方式解决

public class OffSetDateTimeConverter {
    
    /**
     * yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static OffsetDateTime convertDate(String date) {
        if (StringUtils.isBlank(date)) {
            return null;
        }
        LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        return OffsetDateTime.of(localDateTime, ZoneId.systemDefault().getRules().getOffset(localDateTime));
    }
    /**
     * "yyyy-MM-dd HH:mm:ss"
     *
     * @param dateTime
     * @return
     */
    public static OffsetDateTime convertDateTime(String dateTime) {
        if (StringUtils.isBlank(dateTime)) {
            return null;
        }
        LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        return OffsetDateTime.of(localDateTime, ZoneId.systemDefault().getRules().getOffset(localDateTime));
    }
}

OffsetDateTime时间格式转换

可能开发中又碰到OffsetDateTime时间格式,不知道如何转换

最简单一招解决:

OffsetDateTime creationTimestamp;
creationTimestamp.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

即可轻松转换为String字符串类型。

OK!问题解决!以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JDK8中新增的Optional工具类基本使用

    JDK8中新增的Optional工具类基本使用

    Optional不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,接下来通过本文给大家分享JDK8中新增的Optional工具类基本使用,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • 解决IDEA2021版compiler.automake.allow.when.app.running不存在的问题

    解决IDEA2021版compiler.automake.allow.when.app.running不存在的问题

    很多文章介绍IntelliJ IDEA开启热部署功能都会写到在IntelliJ IDEA中的注册表中开启compiler.automake.allow.when.app.running选项,此选项在IntelliJ IDEA 2021.2之后的版本迁移到高级设置中,下面看下设置方法
    2021-09-09
  • Spring在多线程下@Resource注入为null的问题

    Spring在多线程下@Resource注入为null的问题

    这篇文章主要介绍了Spring在多线程下@Resource注入为null的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot 配置文件加密的步骤

    SpringBoot 配置文件加密的步骤

    这篇文章主要介绍了SpringBoot 配置文件加密的步骤,帮助大家更好的理解和学习使用springboot框架,感兴趣的朋友可以了解下
    2021-03-03
  • AndroidHttpClient使用Cookie应用分析

    AndroidHttpClient使用Cookie应用分析

    今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好
    2012-11-11
  • springboot+vue实现验证码功能

    springboot+vue实现验证码功能

    这篇文章主要为大家详细介绍了springboot+vue实现验证码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java的云打印Lodop

    Java的云打印Lodop

    这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • java 同步、异步、阻塞和非阻塞分析

    java 同步、异步、阻塞和非阻塞分析

    这篇文章主要介绍了java 同步、异步、阻塞和非阻塞分析的相关资料,需要的朋友可以参考下
    2017-02-02
  • J2SE 1.5版本的新特性一览

    J2SE 1.5版本的新特性一览

    J2SE 1.5版本的新特性一览...
    2006-12-12
  • SpringBoot使用Redis单机版过期键监听事件的实现示例

    SpringBoot使用Redis单机版过期键监听事件的实现示例

    在缓存的使用场景中经常需要使用到过期事件,本文主要介绍了SpringBoot使用Redis单机版过期键监听事件的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07

最新评论