在Java中使用LocalDate将字符串更改为日期

在Java中使用LocalDate将字符串更改为日期,java,localdate,Java,Localdate,我需要使用LocalDate将字符串date=20160101更改为2016年1月12日。 现在,我的代码如下所示: DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; LocalDate date = LocalDate.parse("20120403", formatter); System.out.println(date); 输出为:2016-01-01 我需要使用DateTimeFormatterBuilde

我需要使用LocalDate将字符串date=20160101更改为2016年1月12日。 现在,我的代码如下所示:

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate date = LocalDate.parse("20120403", formatter);
System.out.println(date);
输出为:2016-01-01

我需要使用DateTimeFormatterBuilder来实现这一点,还是有更简单的方法?
谢谢大家!

你不必使用生成器。DateTimeFormatter可以直接从字符串创建,LocalDatetoString方法以ISO-8601格式UUU-MM-dd打印日期。这就是为什么您的输出为2016-01-01。如果需要以2016年1月1日的格式输出,则需要再次将日期格式化为MMM d,yyy格式

日期时间对象没有格式 您的注释表明您正在将日期时间对象与表示其值的字符串合并

日期时间对象没有格式。这些对象可以生成字符串来表示它们的值,但这些字符串是不同的和独立的。同样,可以通过解析字符串来实例化日期时间对象,但新的日期对象将是不同的和独立的

本地化 您可以生成一个字符串,如中所示,在其中指定特定的格式模式。但通常更好的方法是让java.time为您自动本地化

要本地化,请指定:

确定字符串的长度或缩写。 确定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 );
这门课是为了满足特殊需要。一般来说,你所需要的只是上课

看看这个例子。但是要注意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

输出加拿大法郎:3艾薇儿2012

输出日期:2012年4月3日


非常感谢你们的帮助!我不能让它作为字符串返回。它需要作为LocalDate返回。我打印它的唯一原因是因为我想测试它。如果是这样,那么您已经有了LocalDate对象。date对象实际上是一个LocalDate对象。有什么问题>@Ahab Date对象没有格式。当你把它们转换成字符串时,格式就被添加了。我现在明白了。非常感谢你的帮助!
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 ) ;