使用Java中的LocalDate将String更改为日期

时间:2017-02-13 00:18:22

标签: java localdate

我需要使用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来执行此操作,还是有更简单的方法? 谢谢!

3 个答案:

答案 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日