Bas*_*que 146
Instant.now()
Run Code Online (Sandbox Code Playgroud)
与最早版本的Java捆绑在一起的麻烦的旧日期时间类已被Java 8及更高版本中内置的java.time类所取代.请参阅Oracle教程.许多功能已被后移植到Java 6和7在ThreeTen-反向移植并且还适于在到Android ThreeTenABP.
InstantAn Instant表示UTC时间轴上的时刻,分辨率最高为纳秒.
Instant instant = Instant.now();
Run Code Online (Sandbox Code Playgroud)
该toString方法使用标准ISO 8601格式之一生成一个String对象,其中的文本表示日期时间值.
String output = instant.toString();
Run Code Online (Sandbox Code Playgroud)
2016-06-27T19:15:25.864Z
该Instant班是java.time一个基本构建块类.在处理日期时间时,这应该是您的首选课程,因为通常最佳做法是以UTC格式跟踪,存储和交换日期时间值.
OffsetDateTime但是Instant有一些限制,例如没有用于生成替代格式字符串的格式化选项.为了更灵活,请转换Instant为OffsetDateTime.指定UTC的偏移量.在java.time中表示ZoneOffset对象.在这里,我们希望坚持使用UTC(+00),以便我们可以使用方便的常量ZoneOffset.UTC.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Run Code Online (Sandbox Code Playgroud)
2016-06-27T19:15:25.864Z
现在有了一个Instant对象,您可以使用OffsetDateTime其他格式创建包含文本的String对象.搜索Stack Overflow以获取许多使用示例DateTimeFormatter.
DateTimeFormatter如果要显示某个特定时区的挂钟时间,请应用a ZonedDateTime来获取ZoneId.
在此示例中,我们应用蒙特利尔时区.在夏季,在夏令时(DST)废话下,该区域的偏移量为ZonedDateTime.因此请注意输出中的时间早于四小时,-04:00而不是15几小时.19并且Instant都表示非常相同的同时时刻,只是通过两个不同的镜头看.
OffsetDateTime.now( ZoneOffset.UTC )
Run Code Online (Sandbox Code Playgroud)
2016-06-27T15:15:25.864-04:00 [美国/蒙特利尔]
虽然您应该避免使用旧的日期时间类,但是如果必须可以使用添加到旧类的新方法进行转换.在这里我们使用ZonedDateTime和java.util.Date.from( Instant ).
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
Run Code Online (Sandbox Code Playgroud)
走向另一个方向.
java.util.Date utilDate = java.util.Date.from( instant );
Run Code Online (Sandbox Code Playgroud)
同样,寻找添加到java.util.Date::toInstant(子类GregorianCalendar)转换为和从的子类的新方法Calendar.
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.time.ZonedDateTime,java.util.Date,和Calendar.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.SimpleDateFormat
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类java.sql.*,Interval,YearWeek,和更多.
ass*_*ias 136
使用Java 8,您可以编写:
OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UTC);
Run Code Online (Sandbox Code Playgroud)
要回答您的评论,您可以将其转换为日期(除非您依赖遗留代码,我没有看到任何理由)或者从时代开始将其转换为millis:
Date date = Date.from(utc.toInstant());
long epochMillis = utc.toEpochSecond() * 1000;
Run Code Online (Sandbox Code Playgroud)
在 java8 中,我将使用Instant已经在UTC 中并且易于使用的类。
import java.time.Instant;
Instant ins = Instant.now();
long ts = ins.toEpochMilli();
Instant ins2 = Instant.ofEpochMilli(ts)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下方法:
import java.time.*;
Instant ins = Instant.now();
OffsetDateTime odt = ins.atOffset(ZoneOffset.UTC);
ZonedDateTime zdt = ins.atZone(ZoneId.of("UTC"));
Run Code Online (Sandbox Code Playgroud)
回到 Instant
Instant ins4 = Instant.from(odt);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112837 次 |
| 最近记录: |