Update:在最新版本的 Android 工具中,API脱糖为旧版本的 Android 带来了大部分功能java.timeAndroid 26 及更高版本中内置的功能。
tl;dr
- Use java.time类。
切勿使用Date
, Calendar
, or SimpleDateFormat
.
- Add the 三十ABP https://github.com/JakeWharton/ThreeTenABP库到您的项目。
- See 如何在Android项目中使用ThreeTenABP https://stackoverflow.com/q/38922754/642706.
避免遗留日期时间类
遗留类如Date
& Calendar
are terrible,由不了解日期时间处理的人创建。这些课程多年前就被现代课程所取代java.timeJSR 310 中定义的类。
java.time
The Instant https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#ofInstant-java.time.LocalDateTime-java.time.ZoneOffset-java.time.ZoneId-类取代了Date
类,两者都代表 UTC 中的一个时刻(零小时-分钟-秒的偏移量)。
Instant instant = Instant.now() ; // Capture the current moment in UTC.
The Calendar
类,或者更准确地说,它最常用的具体子类GregorianCalendar https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/GregorianCalendar.html被替换为ZonedDateTime https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ; // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
Convert
最好完全避免遗留的日期时间类。但有时您可能需要与尚未更新的旧代码进行互操作java.time。在这种情况下,转换。期待新的to…
/from…
添加到旧类的转换方法。
Calendar calendar = GregorianCalendar.from( zdt ) ;
…and…
ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;
后端口
The java.time类内置于 Java 8 及更高版本以及 Android 26 及更高版本中。
对于 Java 6 和 7,请使用在三十后端口 https://www.threeten.org/threetenbp/项目。大部分的java.time在那里找到功能。该项目由同一个人领导java.time项目和 JSR 310,史蒂芬·科尔伯恩 https://stackoverflow.com/users/38896/jodastephen.
对于 26 之前的 Android,请使用该向后移植到 Android 的适配,三十ABP https://github.com/JakeWharton/ThreeTenABP项目。