我想在Java中将当前日期时间转换为长整型数值。
我知道这必须与DateTime有关。
DateTime datetime = new DateTime();
但是我找不到将 dateTime 转换为 long 的方法。
其他答案是正确的。
详细说明如下,以下是四种获取自Unix 纪元(即1970年1月1日开始的时间)以来的毫秒数的方法,时区为UTC/GMT(无时区偏移)。按优先顺序呈现。
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 是一个流行的第三方开源库,用于替代 java.util.Date
/Calendar
。它的主要类是 DateTime
,也许这就是你在问题中提到的术语所指的。
Joda-Time 项目现在处于维护模式。该团队建议迁移到 java.time 类。
long millis = org.joda.time.DateTime.now().getMillis();
java.util.Date
这个类最好避免使用,以及它的姐妹类 java.util.Calendar
和 java.text.SimpleDateFormat
。这些问题多多的旧日期时间类现在已经过时了,被 java.time 类所取代。但是对于你特定的目的,这个类确实可以使用。
long millis = new java.util.Date().getTime();
顺便说一下,我不建议将时间跟踪作为从纪元开始的计数。这样会使调试困难,并且几乎不可能发现无效数据,因为人类无法将long
解释为日期时间。此外,由于不同系统使用不同的纪元参考日期,并使用不同粒度的整秒,毫秒,微秒,纳秒和其他单位,因此导致模糊性。
java.time框架内置于Java 8及更高版本。这些类取代了老旧的传统日期时间类,例如java.util.Date
、Calendar
和SimpleDateFormat
。
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
和更多。
System.currentTimeMillis()
就可以了。更多信息请参见:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html。long
类型的日期和时间。或者,你也可以调用BaseTime.getMillis(),同样会返回一个long
类型的日期和时间。