目录
如何创建并使用 SimpleDateFormat?
常见格式错误和注意事项
如何解析字符串为日期?
替代方案:Java 8 及以上推荐使用 java.time
首页 Java java教程 如何使用SimpleDateFormat在Java中格式化日期?

如何使用SimpleDateFormat在Java中格式化日期?

Jul 15, 2025 am 03:12 AM
java 日期格式化

创建并使用 SimpleDateFormat 需要传入格式字符串,如 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");2. 注意大小写敏感、避免混用单字母格式及 YYYY 和 DD 的误用;3. SimpleDateFormat 不是线程安全的,多线程环境下应每次新建实例或使用 ThreadLocal;4. 使用 parse 方法解析字符串时需捕获 ParseException,并注意结果不带时区信息;5. Java 8 及以上推荐使用 DateTimeFormatter 和 LocalDateTime 替代。

How to format a date in Java with SimpleDateFormat?

在 Java 中使用 SimpleDateFormat 格式化日期是一个很常见的操作,但需要注意它的用法和一些潜在的坑。下面是一些你可能会关心的问题和实用建议。

How to format a date in Java with SimpleDateFormat?

如何创建并使用 SimpleDateFormat?

要格式化日期,首先需要创建一个 SimpleDateFormat 实例,并传入你想要的日期格式。例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(new Date());

上面这段代码会输出类似 2025-04-05 14:30:00 的字符串。
这里的格式字符串 "yyyy-MM-dd HH:mm:ss" 是关键,其中:

How to format a date in Java with SimpleDateFormat?
  • yyyy 表示年份
  • MM 表示月份(注意是大写)
  • dd 表示日期
  • HH 表示24小时制的小时
  • mm 表示分钟
  • ss 表示秒

你可以根据需求自由组合这些部分,比如 "yyyy/MM/dd" 或者 "HH:mm" 都是可以的。


常见格式错误和注意事项

使用时有几个容易出错的地方:

How to format a date in Java with SimpleDateFormat?
  • 大小写敏感hh 是12小时制,而 HH 是24小时制;mm 是分钟,MM 是月份。
  • 不要混用单字母格式:比如 y 表示年份,但实际中推荐使用 yyyy 来避免歧义。
  • 线程安全问题SimpleDateFormat 不是线程安全的,如果你在多线程环境下使用它,最好每次都新建一个实例或者使用 ThreadLocal 包装。

举个例子,下面这个格式就容易出错:

new SimpleDateFormat("YYYY-mm-DD")

这里用了 YYYYDD,它们虽然看起来像“年月日”,但实际上 YYYY 是“周年的年”(与 yyyy 不同),DD 是一年中的第几天(不是月中的天)。这种错误会导致结果不符合预期。


如何解析字符串为日期?

除了格式化,SimpleDateFormat 还能将字符串解析成 Date 对象:

String input = "2025-04-05 14:30:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(input);

但要注意:

  • 如果输入格式不匹配,会抛出 ParseException
  • 解析后的 Date 对象是“原始时间点”,不带时区信息
  • 如果输入中包含 AM/PM 等信息,格式中也要加上 a 并确保语言环境一致

替代方案:Java 8 及以上推荐使用 java.time

如果你使用的是 Java 8 或更高版本,建议使用 java.time 包中的类,比如 DateTimeFormatterLocalDateTime,它们更现代、线程安全且 API 更清晰:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = LocalDateTime.now().format(formatter);

虽然这超出了 SimpleDateFormat 的范畴,但在新项目中更值得推荐。


基本上就这些。只要记住格式字符串的规则和线程安全问题,用起来就不难了。

以上是如何使用SimpleDateFormat在Java中格式化日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

Rimworld Odyssey温度指南和Gravtech
1 个月前 By Jack chen
初学者的Rimworld指南:奥德赛
1 个月前 By Jack chen
PHP变量范围解释了
4 周前 By 百草
撰写PHP评论的提示
3 周前 By 百草
在PHP中评论代码
3 周前 By 百草

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1509
276
Edge PDF查看器不起作用 Edge PDF查看器不起作用 Aug 07, 2025 pm 04:36 PM

testthepdfinanotherapptoderineiftheissueiswiththefileoredge.2.enablethebuilt inpdfviewerbyTurningOff“ eflblyopenpenpenpenpenpdffilesexternally”和“ downloadpdffiles” inedgesettings.3.clearbrowsingdatainclorwearbrowsingdataincludingcookiesandcachedcachedfileresteroresoreloresorelorsolesoresolesoresolvereresoreorsolvereresoreolversorelesoresolvererverenn

如何在Java中实现简单的TCP客户端? 如何在Java中实现简单的TCP客户端? Aug 08, 2025 pm 03:56 PM

Importjava.ioandjava.net.SocketforI/Oandsocketcommunication.2.CreateaSocketobjecttoconnecttotheserverusinghostnameandport.3.UsePrintWritertosenddataviaoutputstreamandBufferedReadertoreadserverresponsesfrominputstream.4.Usetry-with-resourcestoautomati

用Docker将Java应用程序部署到Kubernetes 用Docker将Java应用程序部署到Kubernetes Aug 08, 2025 pm 02:45 PM

容器化Java应用:创建Dockerfile,使用基础镜像如eclipse-temurin:17-jre-alpine,复制JAR文件并定义启动命令,通过dockerbuild构建镜像并用dockerrun测试本地运行。2.推送镜像到容器注册表:使用dockertag标记镜像并推送到DockerHub等注册表,需先登录dockerlogin。3.部署到Kubernetes:编写deployment.yaml定义Deployment,设置副本数、容器镜像和资源限制,编写service.yaml创建

VS代码快捷方式专注于Explorer面板 VS代码快捷方式专注于Explorer面板 Aug 08, 2025 am 04:00 AM

VSCode中可通过快捷键快速切换面板与编辑区。要跳转至左侧资源管理器面板,使用Ctrl Shift E(Windows/Linux)或Cmd Shift E(Mac);返回编辑区可用Ctrl `或Esc或Ctrl 1~9。相比鼠标操作,键盘快捷键更高效且不打断编码节奏。其他技巧包括:Ctrl KCtrl E聚焦搜索框,F2重命名文件,Delete删除文件,Enter打开文件,方向键展开/收起文件夹。

修复:Windows Update无法安装 修复:Windows Update无法安装 Aug 08, 2025 pm 04:16 PM

runthewindowsupdatetrubloubleshooterviaSettings>更新&安全> is esseShootsoAtomationfixCommonissues.2.ResetWindowSupDateComponentsByStoppingRealatedServices,RenamingTheSoftWaredWaredWaredSoftwaredSistribution andCatroot2Folders,intrestrestartingthertingthertingtherserviceSteStoceTocle

Java对象的序列化过程是什么? Java对象的序列化过程是什么? Aug 08, 2025 pm 04:03 PM

JavaserializationConvertSanObject'SstateIntoAbyTeSteAmForStorageorTransermission,andDeserializationReconstructstheObjectStheObjectFromThstream.1.toenableserialization,aclassMustimustimplementTheSerializableizableface.2.UseObjectObjectObjectObjectOutputputputputputtreamToserialializeanobectizeanobectementeabectenobexpent,savin

如何在Java中使用一个时循环 如何在Java中使用一个时循环 Aug 08, 2025 pm 04:04 PM

AwhileloopinJavarepeatedlyexecutescodeaslongastheconditionistrue;2.Initializeacontrolvariablebeforetheloop;3.Definetheloopconditionusingabooleanexpression;4.Updatethecontrolvariableinsidethelooptopreventinfinitelooping;5.Useexampleslikeprintingnumber

python numpy线性代数示例 python numpy线性代数示例 Aug 07, 2025 pm 04:52 PM

NumPy是Python中进行科学计算的核心库,擅长处理线性代数运算,提供高效的ndarray数组和numpy.linalg模块中的函数。1.使用np.linalg.solve(A,b)可求解线性方程组Ax=b,得到解向量x;2.矩阵转置通过A.T实现;3.矩阵乘法可用np.dot(A,B)或A@B;4.矩阵逆通过np.linalg.inv(A)计算,需确保矩阵可逆;5.行列式由np.linalg.det(A)给出;6.特征值与特征向量通过np.linalg.eig(A)求得,特征向量已归一化;

See all articles