DateTime.now() 和 new DateTime(System.currentTimeMillis()) 方法在 java 中是否相等?
Are methods DateTime.now() and new DateTime(System.currentTimeMillis()) equal in java?
我需要知道,在java(我的版本jdk 8)中,我可以替换,new DateTime(System.currentTimeMillis())
这个代码形式,'DateTime.now()
'?
我使用了包 import org.joda.time.DateTime;
如何在 java 8(日期和时间)中写同样的东西?
在Java8、DateTime maps tojava.time.ZonedDateTime
和java.time.OffsetDateTime
.
本页由Joda Timecreator/author/maintainer撰写,推荐:
If you are writing code in Java SE 8, its time to migrate to java.time...
是的。
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());
}
与第一种方式相同
是的。
这是相关代码:
public BaseDateTime() {
this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}
public BaseDateTime(long instant) {
this(instant, ISOChronology.getInstance());
}
tl;博士
java.time.Instant.now() // Capture the current moment in UTC.
在内部,时刻被跟踪为整秒计数加上小数秒作为纳秒计数,因为 1970-01-01T00:00:00Z 的纪元参考(Z
表示 UTC) .
java.time
您的 DateTime
class 显然来自 Joda-Time 库。该库的创建者 Stephen Colebourne 继续将 Joda-Time 替换为 java.time classes 内置于 Java 8 及更高版本中,根据 JSR 310。
Instant
暂时使用 UTC,使用 Instant
。要以 UTC 格式捕获当前时刻,Instant.now()
.
Instant
表示自 UTC 中 1970 年第一时刻的纪元参考以来的纳秒计数。
对 System.currentTimeMillis()
的调用是相同的,自 1970 UTC 开始以来的计数,除了更粗略的毫秒分辨率而不是纳秒。实际上,传统的计算机时钟无法以纳秒为单位准确跟踪当前时刻,因此使用 Instant
捕获当前时刻可能仅捕获微秒(通常在 Java 9 及更高版本中)或毫秒(在 Java 8).
结果:无需调用 System.currentTimeMillis()
。请改用 Instant.now()
。
ZonedDateTime
DateTime
等价于 ZonedDateTime
。这个 class 表示通过特定区域(时区)的人们使用的挂钟时间看到的时刻。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
我需要知道,在java(我的版本jdk 8)中,我可以替换,new DateTime(System.currentTimeMillis())
这个代码形式,'DateTime.now()
'?
我使用了包 import org.joda.time.DateTime;
如何在 java 8(日期和时间)中写同样的东西?
在Java8、DateTime maps tojava.time.ZonedDateTime
和java.time.OffsetDateTime
.
本页由Joda Timecreator/author/maintainer撰写,推荐:
If you are writing code in Java SE 8, its time to migrate to java.time...
是的。
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());
}
与第一种方式相同
是的。
这是相关代码:
public BaseDateTime() {
this(DateTimeUtils.currentTimeMillis(), ISOChronology.getInstance());
}
public BaseDateTime(long instant) {
this(instant, ISOChronology.getInstance());
}
tl;博士
java.time.Instant.now() // Capture the current moment in UTC.
在内部,时刻被跟踪为整秒计数加上小数秒作为纳秒计数,因为 1970-01-01T00:00:00Z 的纪元参考(Z
表示 UTC) .
java.time
您的 DateTime
class 显然来自 Joda-Time 库。该库的创建者 Stephen Colebourne 继续将 Joda-Time 替换为 java.time classes 内置于 Java 8 及更高版本中,根据 JSR 310。
Instant
暂时使用 UTC,使用 Instant
。要以 UTC 格式捕获当前时刻,Instant.now()
.
Instant
表示自 UTC 中 1970 年第一时刻的纪元参考以来的纳秒计数。
对 System.currentTimeMillis()
的调用是相同的,自 1970 UTC 开始以来的计数,除了更粗略的毫秒分辨率而不是纳秒。实际上,传统的计算机时钟无法以纳秒为单位准确跟踪当前时刻,因此使用 Instant
捕获当前时刻可能仅捕获微秒(通常在 Java 9 及更高版本中)或毫秒(在 Java 8).
结果:无需调用 System.currentTimeMillis()
。请改用 Instant.now()
。
ZonedDateTime
DateTime
等价于 ZonedDateTime
。这个 class 表示通过特定区域(时区)的人们使用的挂钟时间看到的时刻。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;