Java日期格式化实现过程

 更新时间:2025年11月06日 16:56:19   作者:@zcc@  
本文介绍了在Java中处理日期格式yyyyMMddHHmmss的方法,包括使用java.time包(Java8+)和SimpleDateFormat(Java7及以下),详细说明了格式化和解析时间的示例代码,并强调了线程安全和异常处理的重要性,还讨论了常见错误及其解决方法,以及如何生成唯一标识符

在 Java 中处理日期格式 yyyyMMddHHmmss(即年-月-日-时-分-秒,无分隔符),可以通过 java.time 包(Java 8+)或 SimpleDateFormat(Java 7 及以下)实现。

以下是详细说明和示例代码:

1. Java 8+:使用java.time包

推荐使用 Java 8 的 java.time 包,它更现代、线程安全且功能更强大。

1.1 格式化当前时间为yyyyMMddHHmmss

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateFormatter {
    public static void main(String[] args) {
        // 当前时间
        LocalDateTime now = LocalDateTime.now();
        // 定义格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        // 格式化为字符串
        String formattedTime = now.format(formatter);
        System.out.println("当前时间(yyyyMMddHHmmss): " + formattedTime);
    }
}

输出示例

当前时间(yyyyMMddHHmmss): 20250612154603

1.2 将yyyyMMddHHmmss字符串解析为LocalDateTime

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateFormatter {
    public static void main(String[] args) {
        // 输入字符串
        String input = "20250612154603";
        // 定义解析格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        // 解析为 LocalDateTime
        LocalDateTime dateTime = LocalDateTime.parse(input, formatter);
        System.out.println("解析后的日期时间: " + dateTime);
    }
}

输出示例

解析后的日期时间: 2025-06-12T15:46:03

2. Java 7 及以下:使用SimpleDateFormat

对于旧版 Java,可以使用 SimpleDateFormat,但需注意线程安全问题。

2.1 格式化当前时间为yyyyMMddHHmmss

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatter {
    public static void main(String[] args) {
        // 当前时间
        Date now = new Date();
        // 定义格式
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        // 格式化为字符串
        String formattedTime = formatter.format(now);
        System.out.println("当前时间(yyyyMMddHHmmss): " + formattedTime);
    }
}

输出示例

当前时间(yyyyMMddHHmmss): 20250612154603

2.2 将yyyyMMddHHmmss字符串解析为Date

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatter {
    public static void main(String[] args) {
        try {
            // 输入字符串
            String input = "20250612154603";
            // 定义解析格式
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
            // 解析为 Date
            Date date = formatter.parse(input);
            System.out.println("解析后的日期时间: " + date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

输出示例

解析后的日期时间: Wed Jun 12 15:46:03 CST 2025

3. 注意事项

符号含义示例
yyyy四位数的年份2025
YYYYISO 周历年 2024(可能跨年)谨慎使用,仅用于周相关场景
MM两位数的月份(01-12)06
dd两位数的日期(01-31)12
HH24小时制的小时(00-23)15
hh12小时制的小时(01-12)15
mm分钟(00-59)49
ss秒(00-59)33
SSS毫秒(000-999)123

线程安全:

  • SimpleDateFormat 不是线程安全的,在多线程环境中需每次创建新实例或使用 synchronized
  • DateTimeFormatter 是线程安全的,推荐优先使用。

异常处理

  • 使用 SimpleDateFormat.parse() 时需捕获 ParseException

4. 常见错误及解决方法

错误 1:格式模式与输入字符串不匹配

  • 原因:输入字符串的格式与定义的 DateTimeFormatterSimpleDateFormat 不一致。
  • 解决:检查格式模式是否正确,例如 yyyyMMddHHmmss 不能用于 2025-06-12 15:46:03

错误 2:解析非法日期(如 20250230)

  • 原因:输入字符串包含非法日期(如 2 月 30 日)。
  • 解决:捕获异常并处理非法输入。

5. 扩展:生成唯一标识符

yyyyMMddHHmmss 常用于生成唯一标识符(如订单号、文件名)。

可以结合序列号或 UUID:

// 示例:生成订单号
String orderNumber = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "-001";
System.out.println("订单号: " + orderNumber);

输出示例

订单号: 20250612154603-001

总结

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

相关文章

  • 一文带你回顾Java中的垃圾回收机制

    一文带你回顾Java中的垃圾回收机制

    这篇文章主要给大家介绍了关于Java中垃圾回收机制的相关资料, Java 程序,内存是托管于 JVM 的,即对象的创建和内存的回收都是由 JVM 自行完成的,开发人员是无权干涉的,只能尽量去优化,需要的朋友可以参考下
    2021-08-08
  • java中如何对Map的key顺序排序

    java中如何对Map的key顺序排序

    大家都知道Map排序的方式有很多种,下面这篇文章主要给大家介绍了关于java中如何对Map的key顺序排序的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 详解SpringBoot下文件上传与下载的实现

    详解SpringBoot下文件上传与下载的实现

    这篇文章主要介绍了SpringBoot下文件上传与下载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • SpringSecurity实现动态url拦截(基于rbac模型)

    SpringSecurity实现动态url拦截(基于rbac模型)

    本文主要介绍了SpringSecurity动态url拦截,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot项目自定义静态资源映射规则的实现代码

    SpringBoot项目自定义静态资源映射规则的实现代码

    在开发Web应用时,我们经常需要处理文件上传与访问,​传统做法可能是使用Nginx反向代理,但对于小型项目或快速开发场景,我们可以直接用​Spring MVC的静态资源映射​ 功能,本文将基于WebMvcConfigurer手写配置,实现 ​本地文件目录映射为Web URL,需要的朋友可以参考下
    2025-08-08
  • java调用shell脚本及注意事项说明

    java调用shell脚本及注意事项说明

    这篇文章主要介绍了java调用shell脚本及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 浅谈java指令重排序的问题

    浅谈java指令重排序的问题

    下面小编就为大家带来一篇浅谈java指令重排序的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java实现上传文件图片到指定服务器目录

    Java实现上传文件图片到指定服务器目录

    本文通过实例代码给大家介绍了java上传文件图片到指定服务器目录的相关知识,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Java字符串格式化工具String.format()完整用法指南

    Java字符串格式化工具String.format()完整用法指南

    String.format是Java中的一个静态方法,用于创建格式化的字符串,这篇文章主要介绍了Java字符串格式化工具String.format()完整用法指南的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01
  • SpringBoot中多个实现的接口正确注入的六种方式

    SpringBoot中多个实现的接口正确注入的六种方式

    在SpringBoot中,正确注入多个接口实现包括使用@Autowired和@Qualifier、@Resource注解、构造方法注入、@Primary注解、Java配置类以及将所有实现注入到List或Map中,感兴趣的可以了解一下
    2024-10-10

最新评论