我正在将我的Android应用转换为使用ThreeTen-Backport而不是旧版Java Date
类来使用新的Java 8日期时间类。
根据用户的Android偏好设置格式化日期和时间以呈现给用户的最佳/推荐方式是什么?在使用Date
类时,我这样使用DateFormat
:
DateFormat.getDateFormat(context).format(new Date()) // for date
DateFormat.getTimeFormat(context).format(new Date()) // for time
这些方法接收Date
作为参数。我应该通过将OffsetDateTime
转换为Date
来继续使用它们吗,还是有更好的方法呢?
答案 0 :(得分:3)
org.threeten.bp.format
忘记DateFormat
和Date
。几年前,这些可怕的类被JSR 310所取代。
请参见org.threeten.bp.format
软件包。
DateTimeFormatter
具体来说,请看DateTimeFormatter
类及其ofLocalized…
方法。
有关更多信息,请从 java.time 中搜索等效的类。格式已经被覆盖很多次了。 API和功能将几乎相同,因此现有文章将适用。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Locale l = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l ) ;
String output = zdt.format( f ) ;
2019年5月11日
如果您要使用JVM的当前默认值for the time zone或for the locale,建议您明确使用。这样,任何阅读您代码的人都知道您考虑了区域/区域问题,并有意识地选择使用默认值。
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Locale l = Locale.getDefault() ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l ) ;
String output = zdt.format( f ) ;