我需要一个方法,我可以传递locale(和样式,可能),谁应该返回我的日期格式字符串。例如,getDateFormatString(new Locale("en-US"), FormatStyle.SHORT)
将返回“M / dd / yy”。
使用DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(locale);
这样的东西进行解析是不够的,因为我还需要解析格式变化,例如将M / dd解释为当前年份的日期,所以我想在原始格式字符串。
答案 0 :(得分:0)
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 );
类似的类型包括YearMonth
和Year
以及Month
。
还要仔细阅读ThreeTen-Extra项目,了解更多使用java.time的类。
DateTimeFormatterBuilder
对于格式化模式无法实现的复杂变体,请考虑使用DateTimeFormatter
构建DateTimeFormatterBuilder
。搜索Stack Overflow以供讨论和举例。