sha*_*bai 2 java datetime parsing formatter
我正在尝试使用类似的代码解析Joda-Time的时间(从使用Joda Date&Time API的 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" );
Run Code Online (Sandbox Code Playgroud)
但是,该应用程序可能在海外使用,这意味着该月可能包含外语,
例如6月土耳其语的Haz缩短了,如何解析"07.Haz.2014",它抛出java.lang.IllegalArgumentException:格式无效
Bas*_*que 11
您的输入数据07.Haz.2014与示例代码中的格式不匹配yyyy-MM-dd HH.
请参阅下面的示例代码以获取正确的格式模式
要解析土耳其语月份的名称,必须指定Java语言环境(包括语言).请参阅此问题,设置土耳其语和英语区域设置.
Joda-Time 2.3中的示例代码.
Locale对象由语言和国家/地区组成.
请注意时区的使用.如果省略时区,将为您分配一个时区,即JVM的当前默认时区.最好指定一个而不是依赖于默认值.时区控制如何解释当天的开始.6月7日在世界各地的不同时刻开始,伊斯坦布尔早些时候的新一天比蒙特利尔更新.
不要混淆语言环境和时区.
通常我们将区域设置和时区一起考虑,在区域设置的地理区域中使用时区,但实际上它们可以是正交的.例如,蒙特利尔的商人可能希望用法语读取日期时间字符串,该字符串表示土耳其客户期望交货时的本地日期时间.在这种情况下,字符串将使用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 );
Run Code Online (Sandbox Code Playgroud)
转储到控制台......
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 );
Run Code Online (Sandbox Code Playgroud)
跑的时候......
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4737 次 |
| 最近记录: |