我需要知道在java(我的jdk 8版)中,我可以new DateTime(System.currentTimeMillis())
替换此代码形式'DateTime.now()
'吗?
我使用了软件包import org.joda.time.DateTime;
如何在Java 8(日期和时间)中写同样的东西?
答案 0 :(得分:3)
在Java 8中,DateTime maps to java.time.ZonedDateTime
和java.time.OffsetDateTime
。
此页面由Joda Time的创建者/作者/维护者编写,并建议:
如果您正在使用Java SE 8编写代码,则该迁移到java.time的时间了。
答案 1 :(得分:3)
java.time.Instant.now() // Capture the current moment in UTC.
在内部,由于1970年1月1日T00:00:00Z的纪元参考(Z
代表UTC),因此以秒为单位加一分之一秒(以纳秒为单位)来跟踪该时刻。 / p>
您的DateTime
类显然来自Joda-Time库。根据JSR 310,该库的创建者Stephen Colebourne继续用Java 8和更高版本中内置的 java.time 类替换Joda-Time。
Instant
使用UTC暂时使用Instant
。要捕获UTC中的当前时刻,请Instant.now()
。
Instant
代表自UTC 1970年第一时刻的纪元参考以来的纳秒计数。
对System.currentTimeMillis()
的调用是相同的,从1970 UTC开始算起,只是毫秒级(而不是纳秒级)的分辨率更高。实际上,传统的计算机时钟无法精确地以纳秒为单位跟踪当前时刻,因此使用Instant
捕获当前时刻可能仅捕获微秒(在Java 9和更高版本中通常)或毫秒(在Java 8中)。
结果:不需要打{{1}} 。请改用System.currentTimeMillis()
。
Instant.now()
相当于ZonedDateTime
的是DateTime
。此类代表通过特定地区(时区)人们使用的挂钟时间看到的时刻。
ZonedDateTime
答案 2 :(得分:1)
是的。
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());
}
与第一种方法相同。
答案 3 :(得分:1)
是的
这是相关代码:
public BaseDateTime() {
this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}
public BaseDateTime(long instant) {
this(instant, ISOChronology.getInstance());
}