-1

我需要通过使用将 String date="20160101" 更改为 "January 1,2016 LocalDate" 现在,我的代码如下所示:

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

输出为:2016-01-01

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

4

3 回答 3

2

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);
于 2017-02-13T00:58:34.857 回答
1

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

于 2017-02-13T00:26:54.787 回答
0

日期时间对象没有格式

您的评论表明您将日期时间对象与表示其值的字符串混为一谈。

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

本地化

您可以生成一个字符串,如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上课。

请参阅在 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

输出加拿大法语:2012 年 4 月 3 日

输出美国:2012 年 4 月 3 日

于 2017-02-13T03:04:07.707 回答