说说字符串转 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!问题解决!以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决IDEA2021版compiler.automake.allow.when.app.running不存在的问题
很多文章介绍IntelliJ IDEA开启热部署功能都会写到在IntelliJ IDEA中的注册表中开启compiler.automake.allow.when.app.running选项,此选项在IntelliJ IDEA 2021.2之后的版本迁移到高级设置中,下面看下设置方法2021-09-09Spring在多线程下@Resource注入为null的问题
这篇文章主要介绍了Spring在多线程下@Resource注入为null的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-02-02SpringBoot使用Redis单机版过期键监听事件的实现示例
在缓存的使用场景中经常需要使用到过期事件,本文主要介绍了SpringBoot使用Redis单机版过期键监听事件的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-07-07
最新评论