我需要使用LocalDate
将String date =“20160101”更改为“2016年1月1日”。
现在,我的代码看起来像这样:
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate date = LocalDate.parse("20120403", formatter);
System.out.println(date);
输出结果为:2016-01-01
我是否需要使用DateTimeFormatterBuilder
来执行此操作,还是有更简单的方法?
谢谢!
答案 0 :(得分:2)
LocalDate#toString
方法以ISO-8601格式uuuu-MM-dd打印日期。这就是你的输出为2016-01-01
的原因。如果您需要“1月1,2016”格式的输出,则需要再次将日期格式设置为MMM d, yyyy
格式。
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate date = LocalDate.parse("20120403", formatter);
String strDate = date.format(DateTimeFormatter.ofPattern("MMM d, yyyy"));
System.out.println(strDate);
答案 1 :(得分:1)
您不必使用构建器。可以直接从字符串here
创建DateTimeFormatter答案 2 :(得分:0)
您的注释表明您将日期时间对象与表示其值的字符串混为一谈。
日期时间对象没有格式。对象可以生成字符串来表示它们的值,但是这些字符串是不同的并且是分开的。同样,可以通过解析字符串来实例化日期时间对象,但新的日期对象将是不同的并且是分开的。
您可以生成一个字符串,如Answer by VHS所示,您可以在其中指定特定的格式设置模式。但通常更好的方法是让java.time自动为您自动本地化。
要进行本地化,请指定:
FormatStyle
确定字符串的长度或缩写。Locale
确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范示例:
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.ITALY, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output = myLocalDate.format( f );
DateTimeFormatterBuilder
课程是出于特殊需要。通常,您只需要DateTimeFormatter
类。
请参阅此示例code run live at IdeOne.com。但要注意IdeOne.com网站对Java的实现的限制:忽略替代语言环境,硬编码为单个英语语言环境(可能是Locale.US)。
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate localDate = LocalDate.parse("20120403", formatter);
String outputStandard = localDate.toString();
DateTimeFormatter fCanadaFrench =
DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
.withLocale( Locale.CANADA_FRENCH ) ;
String outputCanadaFrench = localDate.format( fCanadaFrench ) ;
DateTimeFormatter fUS =
DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
.withLocale( Locale.US ) ;
String outputUS = localDate.format( fUS ) ;
localDate.toString():2012-04-03
outputCanadaFrench:3 avril 2012
outputUS:2012年4月3日