按区域设置获取日期格式

时间:2017-03-08 15:51:33

标签: java date parsing internationalization

我需要一个方法,我可以传递locale(和样式,可能),谁应该返回我的日期格式字符串。例如,getDateFormatString(new Locale("en-US"), FormatStyle.SHORT)将返回“M / dd / yy”。

使用DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(locale);这样的东西进行解析是不够的,因为我还需要解析格式变化,例如将M / dd解释为当前年份的日期,所以我想在原始格式字符串。

1 个答案:

答案 0 :(得分:0)

TL;博士

LocalDate currentYearAtGivenMonthDay =

Year.now( 
    ZonedId.of( "America/Montreal" )
).atMonthDay(
    MonthDay.parse( "1/7" , DateTimeFormatter.ofPattern( "M/d"
) )

详细

java.time类有一些非常具体的类型。

MonthDay

对于您的某一天,请使用MonthDay课程。使用DateTimeFormatter指定任何非标准(ISO 8601)格式的输入字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/d" );
MonthDay md = MonthDay.parse( yourInput , f );

指定一年获得LocalDate

LocalDate ld = md.atYear( 2017 );

要确定当前年份而不是硬编码年份数字,请使用Year课程。指定时区,对于任何给定时刻,日期按地区而变化,因此年份可能在12月31日到1月1日左右变化。

ZoneId z = ZonedId.of( "America/Montreal" );
Year currentYear = Year.now( z );
LocalDate ld = currentYear.atMonthDay( md );

类似的类型包括YearMonthYear以及Month

还要仔细阅读ThreeTen-Extra项目,了解更多使用java.time的类。

DateTimeFormatterBuilder

对于格式化模式无法实现的复杂变体,请考虑使用DateTimeFormatter构建DateTimeFormatterBuilder。搜索Stack Overflow以供讨论和举例。