协慌网

登录 贡献 社区

如何使用 Java 获取当前日期 / 时间

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

答案

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

  • 如果您希望日期 / 时间为单个数字值,那么System.currentTimeMillis()会为您提供该值,以 UNIX 纪元后的毫秒数表示(以 Java long )。该值是 UTC 时间点的增量,并且与本地时区1无关。

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

    • new Date()为您提供了一个使用当前日期 / 时间初始化Date问题在于Date API 方法大多存在缺陷…… 并且已弃用。

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

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

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

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

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


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());

如果您希望当前日期为字符串,请尝试以下操作:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

或者

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/