我正在尝试使用下面的类似代码Joda-Time解析时间(从Using Joda Date & Time API to parse multiple formats中的btiernay复制)
DateTimeParser[] parsers = {
DateTimeFormat.forPattern( "yyyy-MM-dd HH" ).getParser(),
DateTimeFormat.forPattern( "yyyy-MM-dd" ).getParser() };
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append( null, parser).toFormatter();
DateTime date1 = formatter.parseDateTime( "2010-01-01" );
DateTime date2 = formatter.parseDateTime( "2010-01-01 01" );
然而,该应用程序可能在海外使用,这意味着该月可能包含外语,
例如6月土耳其语的Haz会缩短,如何解析“07.Haz.2014”,它会抛出java.lang.IllegalArgumentException:格式无效
答案 0 :(得分:11)
您的输入数据07.Haz.2014
与示例代码yyyy-MM-dd HH
中的格式不符。
请参阅下面的示例代码,了解正确的格式模式。
要解析Turkish months的名称,您必须指定Java locale(其中包含一种语言)。请参阅此问题Setting Turkish and English locale。
Joda-Time 2.3。
中的示例代码Locale对象由语言和国家/地区组成。
请注意使用时区。如果省略时区,将为您分配一个时区,即JVM的当前默认时区。最好指定一个而不是依赖于默认值。时区控制如何解释当天的开始。 6月7日在世界各地的不同时刻开始,伊斯坦布尔早些时候开始新的一天比蒙特利尔更新。
不要混淆语言环境和时区。
-08:00
比UTC晚几个小时,印度的+05:30
比UTC早五个半小时。通常我们将区域设置和时区一起考虑,在区域设置的地理区域中使用时区,但实际上它们可以是正交的。例如,蒙特利尔的商人可能希望用法语读取日期时间字符串,该字符串表示土耳其客户期望交货时的本地日期时间。在这种情况下,字符串使用Québécois语言环境进行渲染,但使用土耳其语时区。
我强烈建议您始终指定区域设置和时区。如果省略,则应用JVM的/两者的默认值。这种默认应用程序不会导致日期时间编程中的混淆。
String input = "07.Haz.2014";
java.util.Locale locale = new java.util.Locale( "tr", "TR" );
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Istanbul" ); // Assuming this time zone (not specified in Question).
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd.MMM.yyyy" ).withLocale( locale ).withZone( timeZone );
DateTime dateTime = formatter.parseDateTime( input );
String outputQuébécois = DateTimeFormat.forStyle( "FF" ).withLocale( java.util.Locale.CANADA_FRENCH ).print( dateTime ); //
DateTime dateTimeUtc = dateTime.withZone( DateTimeZone.UTC );
转储到控制台...
System.out.println( "input: " + input );
System.out.println( "locale: " + locale );
System.out.println( "dateTime: " + dateTime );
System.out.println( "outputQuébécois: " + outputQuébécois );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
跑步时......
input: 07.Haz.2014
locale: tr_TR
dateTime: 2014-06-07T00:00:00.000+03:00
outputQuébécois: samedi 7 juin 2014 0 h 00 EEST
dateTimeUtc: 2014-06-06T21:00:00.000Z