2017-02-13 54 views
-1

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

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; 
LocalDate date = LocalDate.parse("20120403", formatter); 
System.out.println(date); 

输出是:2016年1月1日

我需要使用DateTimeFormatterBuilder要做到这一点,还是有更简单的方法? 谢谢!

+1

https://docs.oracle.com/javase/tutorial/datetime/iso /format.html – shmosel

回答

1

您不必使用生成器。 DateTimeFormatter可以直接从字符串创建here

1

LocalDate#toString方法以ISO-8601格式打印日期uuuu-MM-dd。这就是为什么你的输出为2016-01-01。如果您需要“2016年1月1日”格式的输出,则需要再次将日期格式设置为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); 
+0

非常感谢您的帮助! – Ahab

+0

我不能让它作为字符串返回。它需要作为LocalDate返回。我打印它的唯一原因是因为我想测试它。 – Ahab

+0

如果是这种情况,您已经拥有LocalDate对象。 date对象实际上是一个LocalDate对象。它有什么问题> – VHS

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艾薇2012

outputUS:2012年4月3日