如何在格式化时从Java 8中获取日期的全名

Apu*_*ngh 4 java localization date-formatting java-time

使用新的Java 8 java.time API,我需要转换LocalDate并获取月和日的全名.像三月(不是三月)和周一(不是周一).3月13日星期五应格式化为3月13日星期五..不是3月13日星期五.

Joe*_*e C 13

你要找的字符串是MMMM.

来源:DateTimeFormatter Javadoc


Bas*_*que 7

TL;博士

使用自动本地化.无需指定格式模式.

localDate.format( 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.UK )
)
Run Code Online (Sandbox Code Playgroud)

2017年1月23日星期一

LocalDate
.of( 2017 , Month.JANUARY , 23 )
.getMonth()
.getDisplayName(
    TextStyle.FULL , 
    Locale.CANADA_FRENCH 
)
Run Code Online (Sandbox Code Playgroud)

让维耶

从字面上看你的标题,我会使用方便的Month枚举.

LocalDate ld = LocalDate.of( 2017 , Month.JANUARY , 23 );
Month month = ld.getMonth() ;  // Returns a `Month` object, whereas `getMonthValue` returns an integer month number (1-12).
Run Code Online (Sandbox Code Playgroud)

让java.time完成自动本地化的工作.要进行本地化,请指定:

  • TextStyle 确定字符串的长度或缩写.
  • Locale 确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范.

例如:

String output = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;  // Or Locale.US, Locale.KOREA, etc.
Run Code Online (Sandbox Code Playgroud)

让维耶

日期

如果您希望整个日期本地化,DateTimeFormatter请完成工作.在这里我们使用FormatStyle而不是TextStyle.

例:

Locale l = Locale.CANADA_FRENCH ;  // Or Locale.US, Locale.KOREA, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                                       .withLocale( l ) ;
String output = ld.format( f );
Run Code Online (Sandbox Code Playgroud)

dimanche 23 janvier 2107


关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.