如何在Java中获取当前日期/时间
在Java中获取当前日期/时间的最佳方法是什么?
这取决于您想要的日期/时间形式:
如果您希望将日期/时间作为单个数值,则将其表示为UNIX纪元之后的毫秒数(作为Java)。此值是 UTC 时间点的增量,与本地时区1 无关。System.currentTimeMillis()
long
如果您希望日期/时间采用允许您以数字方式访问组件(年,月等)的形式,则可以使用以下方法之一:
new Date()
为您提供一个使用当前日期/时间初始化的对象。问题是API方法大多存在缺陷...并已弃用。Date
Date
Calendar.getInstance()
为您提供一个使用当前日期/时间初始化的对象,使用默认值和 .其他重载允许您使用特定的和/或 .日历工作...但是API仍然很麻烦。Calendar
Locale
TimeZone
Locale
TimeZone
new org.joda.time.DateTime()
为您提供一个使用当前日期/时间初始化的Joda时间对象,使用默认时区和时间顺序。还有很多其他的Joda替代品...太多了,无法在这里描述。(但请注意,有些人报告说Joda时间存在性能问题;例如,https://stackoverflow.com/questions/6280829。)
在 Java 8 中,调用 并将为您提供当前日期/时间的表示2。java.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尚未标记为已弃用。
(注意:仅适用于 Java 版本 <8。对于 Java 8+,请检查其他回复。
如果您只需要以 YYYY.MM.DD-HH.MM.SS 格式输出时间戳(非常常见的情况),那么可以采用以下方法:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());