展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

本文目录

    在Java应用程序开发中,获取当前系统时间并转换成指定格式的文本(例如 2026-03-31 15:30:00)是一项基础且高频的操作。完成这项任务有两种截然不同的工具链:一种是Java 8及以上版本推荐使用的 java.time.LocalDateTime 配合 DateTimeFormatter,另一种是历史遗留的 java.util.Date 配合 java.text.SimpleDateFormat。两者的核心差异在于线程安全模型、API设计理念以及底层架构。

    获取并格式化时间的执行步骤

    无论是现代API还是旧版类库,获取当前时间并将其格式化输出给用户或日志,都遵循标准的处理管道:初始化系统当前时间对象、构建具有特定模式串的格式化器,最后由格式化器或时间对象执行格式化方法生成目标字符串。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    图 1:Java中时间获取与文本格式化的标准处理流

    现代推荐方案:DateTimeFormatter(Java 8+)

    自Java 8引入 java.time 包(JSR-310规范)以来,DateTimeFormatter 已经成为处理时间文本转化的行业标准。它是不可变类(Immutable),完全具备线程安全特性,适合在类中作为静态常量长期复用,而不需要在每次格式化时重新实例化。

    完整使用示例

    package com.example.time;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    public class ModernTimeFormatExample {
        // 线程安全,推荐作为常量共享复用
        private static final DateTimeFormatter FORMATTER = 
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
        public static void main(String[] args) {
            // 1. 获取当前系统默认时区的时间
            LocalDateTime currentDateTime = LocalDateTime.now();
    
            // 2. 执行格式化操作(两种写法等价)
            String output1 = currentDateTime.format(FORMATTER);
            String output2 = FORMATTER.format(currentDateTime);
    
            // 3. 打印结果
            System.out.println("标准格式化输出: " + output1);
            System.out.println("等价格式化输出: " + output2);
        }
    }

    运行输出结果示例:

    标准格式化输出: 2026-03-31 15:42:19
    等价格式化输出: 2026-03-31 15:42:19

    在这段代码中,LocalDateTime.now() 会根据操作系统时钟和当前系统默认时区捕获年月日时分秒。DateTimeFormatter.ofPattern() 会把模式串解析为格式化组件。调用 currentDateTime.format(...) 或 FORMATTER.format(...) 都会得到完全相同的纯文本输出。

    传统遗留方案:SimpleDateFormat(Java 1.0 - 7)

    在Java 8之前,开发者通常借助 java.util.Date 与 java.text.SimpleDateFormat。这种方式依然广泛存在于维护老系统或处理老旧SDK接口的场景中。

    完整使用示例

    package com.example.time;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class LegacyTimeFormatExample {
        public static void main(String[] args) {
            // 1. 获取当前系统时间的时间戳封装对象
            Date currentDate = new Date();
    
            // 2. 构造指定模式的格式化器
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
            // 3. 转换输出
            String output = sdf.format(currentDate);
    
            // 4. 打印结果
            System.out.println("旧版格式化输出: " + output);
        }
    }

    运行输出结果示例:

    旧版格式化输出: 2026-03-31 15:42:19

    关键陷阱:SimpleDateFormat的线程安全问题与原理

    为什么现代系统极力避免在并发环境下共用 SimpleDateFormat?关键在于其内部维护的状态变量。

    在 SimpleDateFormat 的继承树中,基类 DateFormat 内部维护了一个共享的 protected Calendar calendar 对象。当调用 format(Date date) 时,代码首先会执行 calendar.setTime(date),然后再从 calendar 中读取各个时间字段。如果在多线程共享单例的场景下,线程A刚把自己的时间赋值给 calendar,CPU发生上下文切换,线程B紧接着用自己的时间重写了 calendar,此时线程A恢复运行并取值,就会读到线程B的数据甚至不合法的脏数据,导致时间输出错乱或抛出 NumberFormatException。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    图 2:SimpleDateFormat与DateTimeFormatter底层多线程运行状态对比
    生产安全告警:千万不要在Spring的单例Service或静态变量中声明 public static final SimpleDateFormat sdf = ... 供多线程直接调用。如果必须在旧框架中使用 SimpleDateFormat,请使用 ThreadLocal 进行线程隔离,或在方法内部每次调用时局部实例化(new SimpleDateFormat)。

    常见格式化占位符规则及易混淆点

    在编写模式串(Pattern)时,大小写的混淆会导致严重的时间换算错误。以下是Java时间格式化中最关键的字符映射规范:

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    图 3:时间格式化关键占位符匹配规范

    特别需要防范的是 yyyy 与 YYYY 的混淆:YYYY 遵循的是“基于周的年份”(Week-based Year)。在ISO-8601规范下,如果某年的最后几天所处的完整一周跨入了次年,且该周在新年的天数更多,YYYY 会直接算作次年。例如在2024年12月29日使用 YYYY-MM-dd 格式化,输出结果可能会变成 2025-12-29。因此,业务开发中格式化公历年份,必须严格使用小写 yyyy。

    特性对比与选型维度

    在技术选型和项目重构时,我们可以从线程安全性、所属版本、类型支持等维度直观审视两者的差异:

    对比维度 DateTimeFormatter 体系 SimpleDateFormat 体系
    引入版本 Java 8(2014年)及以上 Java 1.1(早期遗留)
    线程安全性 线程安全(不可变对象,全局复用) 线程不安全(内部共享 Calendar 状态)
    对应时间载体 LocalDateTime, ZonedDateTime, Instant 等 java.util.Date, java.util.Calendar
    时区处理支持 极佳(时区与本地时间严格隔离) 较弱(Date对象不含时区,但toString时会混淆)
    推荐使用场景 所有新工程、高并发服务、现代Spring Boot项目 仅维护未升级老工程或对接纯旧版第三方类库

    全景总结与架构决策路线

    针对Java获取当前时间并输出格式化文本的任务,开发决策路径十分明确:

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    图 4:Java时间格式化组件架构选型与安全实践全景图

    只要项目运行在Java 8及以上环境,永远优先使用 LocalDateTime 配合静态常量化的 DateTimeFormatter。这不仅能消除并发隐患,而且代码表达力更强。只有在对接必须接收 java.util.Date 的陈旧接口时,才需要考虑通过 Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()) 进行过渡转换,从而彻底从架构层面杜绝时间处理相关的并发风险。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。