【问题标题】:Convert current datetime to long in Java [closed]在Java中将当前日期时间转换为长[关闭]
【发布时间】:2014-01-18 01:19:17
【问题描述】:

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

我知道它必须与日期时间有关

DateTime datetime = new DateTime();

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

【问题讨论】:

标签: java date datetime


【解决方案1】:

其他答案都是正确的。

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

详细说一下,这里有四种方法可以得到自UnixEpoch,在UTC/GMT中1970年1月1日开始的毫秒数(无时区偏移) .按优先顺序呈现。

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 上,我得到了 microseconds 中的值,表示六位小数。

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

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

System

System 类的方法 currentTimeMillis 有效。但很有可能您正在使用日期时间值进行其他一些工作。如果是这样,请跳过 System 并仅使用日期时间类。

long millis = System.currentTimeMillis();

乔达时间

Joda-Time 是流行的第三方开源库,用于代替java.util.Date/Calendar。它的主要类是DateTime,所以考虑到您的问题使用该术语,这可能就是您的想法。

Joda-Time 项目现在位于maintenance mode。团队建议迁移到 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();

顺便说一句,我确实建议将跟踪时间作为计数来自-epoch。使调试变得困难,并且几乎不可能发现无效数据,因为人类无法将 long 解释为日期时间。此外,由于不同的系统使用different epoch reference dates,并使用不同的整秒粒度,millisecondsmicrosecondsnanoseconds 等,因此含糊不清。


关于java.time

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

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

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

从哪里获得 java.time 类?

  • Java SE 8Java SE 9 及更高版本
    • 内置。
    • 标准 Java API 的一部分,带有捆绑实现。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6Java SE 7
    • 大部分 java.time 功能都在ThreeTen-Backport 中向后移植到 Java 6 和 7。
  • Android
    • java.time 类的 Android 捆绑包实现的更高版本。
    • 对于早期的 Android (ThreeTenABP 项目采用 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

    【解决方案2】:

    如果您的意思是 currentnow,那么 System.currentTimeMillis() 会为您完成。更多信息在这里:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

    【讨论】:

      【解决方案3】:

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

      datetime.getMillis()
      

      【讨论】:

        【解决方案4】:

        您可以调用System.currentTimeMillis(),它会返回一个long。或者,您可以拨打BaseTime.getMillis()。两者都会以long 的形式为您提供日期和时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-26
          • 1970-01-01
          • 1970-01-01
          • 2021-12-23
          相关资源
          最近更新 更多