如何在Java中获取当前日期/时间

2022-08-31 04:05:29

在Java中获取当前日期/时间的最佳方法是什么?


答案 1

这取决于您想要的日期/时间形式:

  • 如果您希望将日期/时间作为单个数值,则将其表示为UNIX纪元之后的毫秒数(作为Java)。此值是 UTC 时间点的增量,与本地时区1 无关System.currentTimeMillis()long

  • 如果您希望日期/时间采用允许您以数字方式访问组件(年,月等)的形式,则可以使用以下方法之一:

    • new Date()为您提供一个使用当前日期/时间初始化的对象。问题是API方法大多存在缺陷...并已弃用。DateDate

    • Calendar.getInstance()为您提供一个使用当前日期/时间初始化的对象,使用默认值和 .其他重载允许您使用特定的和/或 .日历工作...但是API仍然很麻烦。CalendarLocaleTimeZoneLocaleTimeZone

    • new org.joda.time.DateTime()为您提供一个使用当前日期/时间初始化的Joda时间对象,使用默认时区和时间顺序。还有很多其他的Joda替代品...太多了,无法在这里描述。(但请注意,有些人报告说Joda时间存在性能问题;例如,https://stackoverflow.com/questions/6280829。)

    • 在 Java 8 中,调用 并将为您提供当前日期/时间的表示2java.time.LocalDateTime.now()java.time.ZonedDateTime.now()

在Java 8之前,大多数了解这些事情的人都建议Joda-time拥有(到目前为止)最好的Java API,用于执行涉及时间点和持续时间计算的事情。

对于 Java 8 及更高版本,建议使用标准包。Joda时间现在被认为是“过时的”,Joda维护者建议人们迁移。3.java.time


1 - System.currentTimeMillis() 给出“系统”时间。虽然将系统时钟设置为(标称)UTC 是正常做法,但本地 UTC 时钟和真 UTC 之间存在差异(增量)。增量的大小取决于系统时钟与 UTC 同步的程度(以及频率)。
2 - 请注意,LocalDateTime 不包含时区。正如javadoc所说:“如果没有偏移量或时区等附加信息,它就无法表示时间线上的瞬间。
3 - 注意:如果您不迁移,您的Java 8代码不会中断,但Joda代码库最终可能会停止获得错误修复和其他补丁。截至2020-02年,Joda的官方“生命周期结束”尚未宣布,Joda API尚未标记为已弃用。


答案 2

(注意:仅适用于 Java 版本 <8。对于 Java 8+,请检查其他回复。

如果您只需要以 YYYY.MM.DD-HH.MM.SS 格式输出时间戳(非常常见的情况),那么可以采用以下方法:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());