Java 企业级工具类全家桶-17-时间类型转换工具类
目录一、工具类功能二、所需环境三、方法与调用示例按需调用四、工具类源码可直接复制一、工具类功能一个入口在Date、毫秒时间戳、字符串与LocalDate/LocalDateTime/Timestamp之间来回转目标类型由调用方指定专治「手里是 A 类型、接口要 B 类型」。二、所需环境JDK 17或以上三、方法与调用示例按需调用方法序号1方法用途把Date、Timestamp、毫秒时间戳、时间字符串、LocalDate/LocalDateTime统一转成你指定的时间类型一个入口替掉一串格式化器和instanceof分支专治「手里是 A 类型、接口要 B 类型」方法定义public static T T convert(Object source, ClassT targetType)️入参解释public static T T convert(时间源, 目标类型)返回值解释T与传入的目标类型同一个类型边界口径时间源认Date含java.sql.Date、java.sql.Time、Timestamp、Long毫秒、String、LocalDate、LocalDateTime目标认String、LocalDate、LocalDateTime、Timestamp、Date、Long范围外抛IllegalArgumentException并带上类型名字符串按 ① ISO 日期时间小数秒最多 9 位②yyyy-MM-dd③yyyy-MM-dd HH:mm:ss依次试首尾空白先去带时区偏移的串与空格分隔还带毫秒的串都不在支持范围要带毫秒写成 ISO 形式解析固定 STRICT2024-02-30与平年2023-02-29算解析失败不会被夹成当月最后一天换算按调用时刻的系统默认时区不在类加载时固化TimeZone.setDefault立刻生效夏令时空档里不存在的本地时间会被顺延一小时重叠时刻取开始那个偏移、往返一致转Long与Date截到毫秒只有LocalDateTime与Timestamp之间往返保留得住毫秒以下的位source或targetType传null抛NullPointerException类型不支持才抛IllegalArgumentException方法示例convert(new Date(1705285845000L), String.class)拿到2024-01-15 10:30:45默认格式只到秒convert(new Date(1705285845000L), LocalDateTime.class)拿到2024-01-15T10:30:45convert(1705285845000L, LocalDateTime.class)拿到2024-01-15T10:30:45毫秒时间戳直接进 java.timeconvert(2024-01-15 10:30:45, LocalDateTime.class)拿到2024-01-15T10:30:45convert(2024-01-15T10:30:45.123, LocalDateTime.class)拿到2024-01-15T10:30:45.123要带毫秒得写成 ISO 的 T 形式convert(2024-01-15, LocalDate.class)拿到2024-01-15convert( 2024-01-15 , LocalDate.class)拿到2024-01-15首尾空白不影响解析convert(2024-01-15, Date.class)拿到Mon Jan 15 00:00:00 CST 2024convert(2024-01-15 10:30:45, Long.class)拿到1705285845000convert(2024-01-15, Timestamp.class)拿到2024-01-15 00:00:00.0只有日期就按当天零点补convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class)拿到2024-01-15 10:30:45convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), LocalDate.class)拿到2024-01-15只取日期部分convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), Timestamp.class)拿到2024-01-15 10:30:45.0convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), Long.class)拿到1705285845000convert(LocalDate.of(2024, 1, 15), LocalDateTime.class)拿到2024-01-15T00:00纯日期按当天零点补convert(LocalDate.of(2024, 1, 15), String.class)拿到2024-01-15 00:00:00字符串目标统一走日期时间格式convert(new java.sql.Time(1705285845000L), LocalDateTime.class)拿到2024-01-15T10:30:45java.sql.Time也按毫秒换算日期部分照带convert(Timestamp.valueOf(2024-01-15 10:30:45.123456789), LocalDateTime.class)拿到2024-01-15T10:30:45.123456789纳秒不丢convert(Timestamp.valueOf(2024-01-15 10:30:45.123456789), Long.class)拿到1705285845123只剩毫秒convert(2024-01-15T10:30:00Z, LocalDateTime.class)抛IllegalArgumentException消息是「无法解析的时间字符串: 2024-01-15T10:30:00Z」convert(2024-02-30, LocalDate.class)抛IllegalArgumentException消息是「无法解析的时间字符串: 2024-02-30」convert(2023-02-29, LocalDate.class)抛IllegalArgumentException2023 不是闰年convert(1, String.class)抛IllegalArgumentException: 不支持的时间源类型: java.lang.Integerconvert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), LocalTime.class)抛IllegalArgumentException: 不支持的目标时间类型: java.time.LocalTimeconvert(null, String.class)抛NullPointerException: source 不能为 nullconvert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), null)抛NullPointerException: targetType 不能为 null方法序号2方法用途把时间转成对端指定写法的字符串格式由第三个参数给省掉为每种输出格式新建一个DateTimeFormatter格式里写了给不出的字段也会被收进统一的异常方法定义public static T T convert(Object source, ClassT targetType, String pattern)️入参解释public static T T convert(时间源, 目标类型, 输出格式)返回值解释T与传入的目标类型同一个类型边界口径pattern为null或全空白时回退默认格式yyyy-MM-dd HH:mm:ss目标类型不是String时这个参数被完全忽略照样按目标类型转格式固定按英文语言环境构建不受系统默认语言影响MMM给 Jan、MMMM给 January、EEEE给 Monday格式要求时间源给不出的字段用z要时区时底层的DateTimeException被包成IllegalArgumentException消息带「时间转换失败: 」前缀格式串对应的格式化器按格式缓存复用上限 128 个超了整体清空重建其余类型与解析口径同方法1方法示例convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class, yyyy年MM月dd日 EEEE)拿到2024年01月15日 Mondayconvert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class, dd MMM yyyy MMMM)拿到15 Jan 2024 January文本字段给的是英文数据convert(1705285845000L, String.class, yyyy年MM月dd日 HH时mm分)拿到2024年01月15日 10时30分毫秒时间戳也能直接格式化convert(Timestamp.valueOf(2024-01-15 10:30:45.123456789), String.class, yyyy-MM-dd HH:mm:ss.SSS)拿到2024-01-15 10:30:45.123格式只到毫秒convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class, null)拿到2024-01-15 10:30:45格式给null用默认convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class, )拿到2024-01-15 10:30:45全空白同样回退默认convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), LocalDate.class, yyyy年)拿到2024-01-15目标不是字符串时格式参数不看convert(LocalDateTime.of(2024, 1, 15, 10, 30, 45), String.class, yyyy-MM-dd z)抛IllegalArgumentException消息是「时间转换失败: Unable to extract ZoneId from temporal 2024-01-15T10:30:45」系统默认时区切到America/New_York后convert(LocalDateTime.of(2024, 3, 10, 2, 30), Long.class)转出的时间戳再解回来拿到2024-03-10T03:3002:30 落在夏令时空档里被顺延一小时同一时区下convert(LocalDateTime.of(2024, 11, 3, 1, 30), Long.class)拿到1730611800000重叠时刻取的是开始那个偏移回解还是 01:30四、工具类源码可直接复制领取方式 关注点赞收藏私信回复「java工具类」可领取100个工具类「Java企业级工具类全家桶1-100」的完整源码.。 工具类已调试通过复制粘贴即可使用省时省力 可保存到自己网盘永久有效觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~