我需要知道,在java(我的版本jdk 8)中,我可以替换,new DateTime(System.currentTimeMillis())
这个代码表单,'DateTime.now()
‘?
我用了import org.joda.time.DateTime;
包
如何在java 8(日期和时间)中编写相同的内容?
发布于 2019-04-02 04:24:11
tl;dr
java.time.Instant.now() // Capture the current moment in UTC.
在内部,该时刻被跟踪为整秒的计数加上以纳秒为计数的分数秒,因为时间参照为1970-01-01T00:00:00Z ( Z
的意思是UTC)。
java.time
您的DateTime
类显然来自Joda-Time库。这个库的创建者Stephen继续用内置到Java 8中的java.time类替换Joda-Time,以及更高版本的JSR 310。
Instant
在UTC的某个时刻,使用Instant
。为了捕捉UTC的当前时刻,Instant.now()
。
Instant
表示自1970年世界协调时第一时刻的划时代参考以来的纳秒数。
对System.currentTimeMillis()
的调用是相同的,从1970年UTC开始就有一个计数,除了更粗的毫秒分辨率而不是纳秒。在实践中,传统的计算机时钟无法以纳秒精确地跟踪当前时刻,因此用Instant
捕获当前时刻可能只捕获微秒(在Java9及更高版本中是典型的)或毫秒(在Java8中)。
结果是:不需要再调用使用Instant.now()
代替。
ZonedDateTime
相当于DateTime
的是ZonedDateTime
。这个类表示特定区域(时区)的人所使用的挂钟时间所显示的时刻。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
发布于 2019-04-02 02:48:39
在Java 8中,DateTime映射到 java.time.ZonedDateTime
和java.time.OffsetDateTime
。
此页面由Joda Time的创建者/作者/维护者编写,并建议:
如果您正在用Java 8编写代码,那么是时候迁移到java.time了.
发布于 2019-04-02 02:54:32
是。new DateTime(System.currentTimeMillis())
会打电话给
public DateTime(long instant) {
super(instant);
}
然后
public BaseDateTime(long instant) {
this(instant, ISOChronology.getInstance());
}
DateTime.now()
会打电话给
public static DateTime now() {
return new DateTime();
}
然后
public DateTime() {
super();
}
然后
public BaseDateTime() {
this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}
这和第一条路一样。
https://stackoverflow.com/questions/55466219
复制相似问题