Java中的方法DateTime.now()和新的DateTime(System.currentTimeMillis())是否相等?

时间:2019-04-02 02:44:48

标签: java date datetime jodatime java.time

我需要知道在java(我的jdk 8版)中,我可以new DateTime(System.currentTimeMillis())替换此代码形式'DateTime.now()'吗?

我使用了软件包import org.joda.time.DateTime;

如何在Java 8(日期和时间)中写同样的东西?

4 个答案:

答案 0 :(得分:3)

在Java 8中,DateTime maps to java.time.ZonedDateTimejava.time.OffsetDateTime

此页面由Joda Time的创建者/作者/维护者编写,并建议:

  

如果您正在使用Java SE 8编写代码,则该迁移到java.time的时间了。

答案 1 :(得分:3)

tl; dr

java.time.Instant.now()  // Capture the current moment in UTC. 

在内部,由于1970年1月1日T00:00:00Z的纪元参考(Z代表UTC),因此以秒为单位加一分之一秒(以纳秒为单位)来跟踪该时刻。 / p>

java.time

您的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());
}