2016-11-29 111 views
0

使用Elasticsearch 1.x(1.7.5取决于Joda时间1.6),我可以使用自定义日期时间格式“yyyy-MM-dd'T'HH:mm :ss.SSSZZ [ZZZ]“来解析使用ZonedDateTime#toString()(例如'2016-11-29T18:47:21.766 + 01:00 [Europe/Paris]')获得的序列化字符串到时间戳。使用Joda时间解析ZonedDateTime#toString()时的失败

随着Elasticsearch 2.4.1(这取决于乔达时间2.9.4),我不能再。它以“java.lang.IllegalArgumentException:无效格式:”2016-11-29T18:47:21.766 + 01:00 [Europe/Paris]“在”欧洲/巴黎“”“异常。

编辑:这是关于Elasticsearch Java API的。

EDIT2:我只是想为Java 8 DateTimeFormatter#ISO_ZONED_DATE_TIME转化为一个格式字符串,可以使用建立一个工作Jodatime FormatDateTimeFormatter乔达#forPattern(字符串,区域设置)

我在TestNG的测试案例重现的问题:

final ZonedDateTime now = ZonedDateTime.now(); 
final String strNow = now.toString(); 
final FormatDateTimeFormatter formatter0 = Joda.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ[ZZZ]", Locale.ROOT); 
formatter0.parser().parseMillis(strNow); 

该代码段失败,出现以下异常:

失败:parseMillisTest java.lang.IllegalArgumentException:格式无效:“2016-11-29T18:47:21.766 + 01:00 [Europe/Paris]”在“欧洲/巴黎”格式不正确“ at org.joda.time.format.DateTimeParserBucket .doParseMillis(DateTimeParserBucket.java:187) 在org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:826) 在org.joda.time.format.DateTimeFormatterTest.parseMillisTest(DateTimeFormatterTest.java:27) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang中。方法.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMe在org.testng.internal.Invoker.invokeMethod(Invoker.java:646) (org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811) (org.testng)处的方法(MethodInvocationHelper.java:100) 。 internal.Invoker.invokeTestMethods(Invoker.java:1137) 在org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) 在org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) 在org.testng.TestRunner.privateRun(TestRunner.java:753) 在org.testng.TestRunner.run(TestRunner.java:607) 在org.testng.SuiteRunner.runTest(SuiteRunner.java:368) 在有机testng.SuiteRunner.run依次(SuiteRunner.java:363) at org.testng.SuiteRunner.privateRun(SuiteRunner.java :321) at org.testng.SuiteRunner.run(SuiteRunner.java:270) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86 ) 在org.testng.TestNG.runSuitesSequentially(TestNG.java:1284) 在org.testng.TestNG.runSuitesLocally(TestNG.java:1209) 在org.testng.TestNG.runSuites(TestNG.java:1124) 在org.testng.TestNG.run(TestNG.java:1096) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG。Java的:236)

  1. 我错认为约达时间2.9.4在这方面是有缺陷?
  2. 希望我确实是错的,对于解析'2016-11-29T18:47:21.766 + 01:00 [欧洲/巴黎]'字符串有什么正确的格式?
+0

这对我的作品在Elasticsearch 2.4.2:'PUT测试 { “映射”:{ “测试”:{ “属性”:{ “日期”:{ “类型”: “日期” , “格式”: “YYYY-MM-dd'T'HH:MM:ss.SSSZZ [ZZZ]” } } } } } POST测试/检验/ 1 { “日期”:” 2016-11-29T18:47:21.766 + 01:00 [Europe/Paris]“}} –

+0

问题出在Java API中。我将编辑这个问题来确切地说明这一点。 还有2.4.2版本。 –

回答

0

从jodatime 2.9.4升级到jodatime 2.9.5解决了这个问题。使用Elasticsearch 2.4.2(取决于jodatime 2.9.5),问题不复存在。我只是跑了我的测试,他们通过。

我再次尝试依赖于jodatime 2.9.4的测试,它失败了。 2.9.5正常工作。 不要考虑我最近的评论,这是错误的。我必须在依赖关系上做错了什么。

相关问题