在Java中将当前日期时间转换为长整型

14

我想在Java中将当前日期时间转换为长整型数值。

我知道这必须与DateTime有关。

DateTime datetime = new DateTime();

但是我找不到将 dateTime 转换为 long 的方法。


2
在Javadoc中有这个内容:http://joda-time.sourceforge.net/apidocs/org/joda/time/base/BaseDateTime.html#getMillis%28%29 - fvu
4个回答

30

其他答案是正确的。

从纪元开始计算的四种方法

详细说明如下,以下是四种获取自Unix 纪元(即1970年1月1日开始的时间)以来的毫秒数的方法,时区为UTC/GMT(无时区偏移)。按优先顺序呈现。

java.time

Java 8及其后版本内置的java.time类是由JSR 310定义的。这些类替代了过时的java.util.Date/Calendar类。这些类受Joda-Time启发但进行了重新架构。

Java.time类能够保持纳秒分辨率。具体来说,在Java 8中,由于Clock的旧实现,捕获当前时刻仅限于毫秒。Java 9带来了一个新的Clock实现,能够以更高的分辨率捕获当前时刻,受主机操作系统和硬件的能力限制。在macOS Sierra上的Oracle JDK 9.0.4上,我获取到以微秒为单位的值,有六位小数分数。

Instant类包括一个方便的方法toEpochMilli,提供毫秒。请注意数据丢失的情况,因为在生成计数毫秒时,Instant中的任何微秒纳秒都将被忽略。

long millis = Instant.now().toEpochMilli();

系统

System类的currentTimeMillis方法可用。但是,如果您正在处理其他日期时间值,请跳过System并直接使用日期时间类。

long millis = System.currentTimeMillis();

Joda-Time

Joda-Time 是一个流行的第三方开源库,用于替代 java.util.Date/Calendar。它的主要类是 DateTime,也许这就是你在问题中提到的术语所指的。

Joda-Time 项目现在处于维护模式。该团队建议迁移到 java.time 类。

long millis = org.joda.time.DateTime.now().getMillis();

java.util.Date

这个类最好避免使用,以及它的姐妹类 java.util.Calendarjava.text.SimpleDateFormat。这些问题多多的旧日期时间类现在已经过时了,被 java.time 类所取代。但是对于你特定的目的,这个类确实可以使用。

long millis = new java.util.Date().getTime();

顺便说一下,我不建议将时间跟踪作为从纪元开始的计数。这样会使调试困难,并且几乎不可能发现无效数据,因为人类无法将long解释为日期时间。此外,由于不同系统使用不同的纪元参考日期,并使用不同粒度的整秒,毫秒微秒纳秒和其他单位,因此导致模糊性。


关于java.time

java.time框架内置于Java 8及更高版本。这些类取代了老旧的传统日期时间类,例如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式,建议迁移到java.time类。

欲了解更多信息,请参阅Oracle教程。并在Stack Overflow上搜索许多示例和说明。规范为JSR 310

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,无需java.sql.*类。

如何获取java.time类?

ThreeTen-Extra项目通过添加额外的类扩展了java.time。该项目是java.time可能未来添加的潜在试验场所。您可能会在这里找到一些有用的类,例如Interval, YearWeek, YearQuarter更多


22

6
假设您正在使用joda-time,下面这行代码可以对您进行排序:
datetime.getMillis()

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接