【发布时间】:2014-01-18 01:19:17
【问题描述】:
我想在 Java 中将当前日期时间转换为长值。
我知道它必须与日期时间有关
DateTime datetime = new DateTime();
但我找不到将 dateTime 转换为 long 的方法。
【问题讨论】:
我想在 Java 中将当前日期时间转换为长值。
我知道它必须与日期时间有关
DateTime datetime = new DateTime();
但我找不到将 dateTime 转换为 long 的方法。
【问题讨论】:
其他答案都是正确的。
详细说一下,这里有四种方法可以得到自UnixEpoch,在UTC/GMT中1970年1月1日开始的毫秒数(无时区偏移) .按优先顺序呈现。
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 中的任何 microseconds 或 nanoseconds 都会被忽略。
long millis = Instant.now().toEpochMilli();
SystemSystem 类的方法 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.Calendar 和java.text.SimpleDateFormat。麻烦的旧日期时间类现在是遗留的,被 java.time 类所取代。但是对于您的特定目的,这个类确实工作。
long millis = new java.util.Date().getTime();
顺便说一句,我确实不建议将跟踪时间作为计数来自-epoch。使调试变得困难,并且几乎不可能发现无效数据,因为人类无法将 long 解释为日期时间。此外,由于不同的系统使用different epoch reference dates,并使用不同的整秒粒度,milliseconds、microseconds、nanoseconds 等,因此含糊不清。
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】:
如果您的意思是 current 或 now,那么 System.currentTimeMillis() 会为您完成。更多信息在这里:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html
【讨论】:
假设您使用的是joda-time,以下行将对您进行排序:
datetime.getMillis()
【讨论】:
您可以调用System.currentTimeMillis(),它会返回一个long。或者,您可以拨打BaseTime.getMillis()。两者都会以long 的形式为您提供日期和时间。
【讨论】: