在Java中将当前日期时间转换为long

时间:2014-01-18 01:19:17

标签: java date datetime

我想将当前日期时间转换为Java中的长值。

我知道它必须与DateTime

有关
DateTime datetime = new DateTime();

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

4 个答案:

答案 0 :(得分:24)

其他答案都是正确的。

从纪元算起的四种方法

要详细说明,以下是Unix / {{3}获得自Epoch UTC,1970年1月1日开始以来的毫秒数的四种方法(没有时区偏移)。按优先顺序排列。

java.time

Java 8及更高版本中内置的GMT类由java.time定义。这些类取代了过时的java.util.Date/Calendar类。这些课程的灵感来自Joda-Time,但是经过重新设计。

java.time类能够保持纳秒分辨率。特别是在Java 8中,由于JSR 310的旧实现,捕获当前时刻仅限于毫秒。 Java 9带来了Clock的全新实现,能够以更精细的分辨率捕获当前时刻,受主机操作系统和主机硬件的限制。在macOS Sierra上的Oracle JDK 9.0.4上,我得到Clock中的值,小数位数的六位数。

Instant类包含一个方便方法microseconds,提供毫秒。请注意数据丢失,因为生成toEpochMilli的计数时,Instant中的任何microsecondsnanoseconds都会被忽略。

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

System

System类'方法milliseconds有效。但是你可能正在做一些日期时间值的其他工作。如果是这样,请跳过系统并使用日期时间类。

long millis = System.currentTimeMillis();

约达时间

currentTimeMillis是用于代替java.util.Date / Calendar的热门第三方开源库。它的主要类是Joda-Time,所以考虑到你对这个术语的使用,这可能是你想到的。

DateTime项目现在位于Joda-Time。该团队建议迁移到maintenance mode类。

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

顺便说一句,我建议将跟踪时间作为计数来自java.time。使调试变得困难,并且几乎不可能发现无效数据,因为人类无法将long解释为日期时间。此外,由于不同的系统使用epoch,并使用不同的整秒数,different epoch reference datesmillisecondsmicroseconds和其他系统,因此模糊不清。


关于 java.time

nanoseconds框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacyjava.util.Date和& Calendar

现在位于SimpleDateFormatJoda-Time项目建议迁移到maintenance mode类。

要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial

您可以直接与数据库交换 java.time 对象。使用符合JSR 310或更高版本的JDBC driver。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

  • JDBC 4.2Java SE 8以及之后
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小功能和修复。
  • Java SE 9Java SE 6
    • 大部分java.time功能都被反向移植到Java 6& 7 {in Java SE 7
  • ThreeTen-Backport
    • 更新版本的Android捆绑java.time类的实现。
    • 对于早期的Android(< 26),Android项目会调整 ThreeTen-Backport (如上所述)。见ThreeTenABP

How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-ExtraIntervalYearWeekYearQuarter

答案 1 :(得分:19)

如果您的意思是当前现在,那么System.currentTimeMillis()会为您执行此操作。更多信息:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

答案 2 :(得分:4)

假设您正在使用joda-time,以下行将对您进行排序:

datetime.getMillis()

答案 3 :(得分:0)

您可以致电System.currentTimeMillis(),其中会返回long。或者,您可以致电BaseTime.getMillis()。要么将日期和时间作为long