我想将当前日期时间转换为Java中的长值。
我知道它必须与DateTime
有关DateTime datetime = new DateTime();
但我找不到将dateTime转换为long的方法。
答案 0 :(得分:24)
其他答案都是正确的。
要详细说明,以下是Unix / {{3}获得自Epoch UTC,1970年1月1日开始以来的毫秒数的四种方法(没有时区偏移)。按优先顺序排列。
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
中的任何microseconds或nanoseconds都会被忽略。
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.Calendar
和java.text.SimpleDateFormat
。麻烦的旧日期时间类现在已经遗留下来,取而代之的是java.time类。但是出于特定目的,此类 工作。
long millis = new java.util.Date().getTime();
顺便说一句,我不建议将跟踪时间作为计数来自java.time。使调试变得困难,并且几乎不可能发现无效数据,因为人类无法将long
解释为日期时间。此外,由于不同的系统使用epoch,并使用不同的整秒数,different epoch reference dates,milliseconds,microseconds和其他系统,因此模糊不清。
nanoseconds框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
您可以直接与数据库交换 java.time 对象。使用符合JSR 310或更高版本的JDBC driver。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-Extra,Interval
,YearWeek
和YearQuarter
。
答案 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
。