我想将我的纪元时间转换为以下格式。
Tuesday, 29th of August, 12:30 PM
我正在尝试使用DateTimeFormatter
final DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("cccc, dd MMMM, hh:mm a")
.withZone(ZoneId.of(timezone)).withLocale(locale);
现在,我如何在输出中获得'of'?这也是本地化的? 例如,在西班牙语中,我希望它为
martes, 29 de agosto, 12:30 PM.
答案 0 :(得分:2)
如果要自动本地化日期时间格式语言和样式,请让DateTimeFormatter
类通过调用ofLocalized…
方法确定格式化程序。
要进行本地化,请指定:
FormatStyle
确定字符串的长度或缩写。Locale
确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范示例代码......
LocalDateTime ldt = LocalDateTime.of( 2017 , 8 , 29 , 12 , 30 );
Locale localeUS = Locale.US;
Locale localeCanadaFrench = Locale.CANADA_FRENCH;
Locale localeSpain = new Locale( "es" , "ES" );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String outputUS = ldt.format( f.withLocale( localeUS ) );
String outputCanadaFrench = ldt.format( f.withLocale( localeCanadaFrench ) );
String outputSpain = ldt.format( f.withLocale( localeSpain ) );
转储到控制台。
System.out.println( "outputUS: " + outputUS );
System.out.println( "outputCanadaFrench: " + outputCanadaFrench );
System.out.println( "outputSpain: " + outputSpain );
outputUS:2017年8月29日,下午12:30:00
outputCanadaFrench:29août201712:30:00
outputSpain:29之前。 2017 12:30:00
对于LONG
或FULL
的格式样式,您需要指定时区。
LocalDateTime ldt = LocalDateTime.of( 2017 , 8 , 29 , 12 , 30 );
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ldt.atZone( z );
Locale localeUS = Locale.US;
Locale localeCanadaFrench = Locale.CANADA_FRENCH;
Locale localeSpain = new Locale( "es" , "ES" );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL );
String outputUS = zdt.format( f.withLocale( localeUS ) );
String outputCanadaFrench = zdt.format( f.withLocale( localeCanadaFrench ) );
String outputSpain = zdt.format( f.withLocale( localeSpain ) );
outputUS:2017年8月29日星期二下午12:30:00新西兰标准时间
outputCanadaFrench:mardi29août2017à12:30:00 heure normale de la Nouvelle-Zélande
outputSpain:martes,29 de agosto de 2017,12:00:00(horaestándardeNueva Zelanda)
我没有发现任何th
(例如nd
,rd
,Cell<T>
等)出现在我见过的任何本地化中。< / p>
ordinal numbers框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和&amp; Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?
How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-Extra,Interval
,YearWeek
和YearQuarter
。