这是一个奇怪的。我的Joda基于DateTimeFormatter的解析器完美运行,除非它由Jenkins运行。我甚至可以像jenkins用户一样登录jenkins,并成功运行测试。
private static final DateTimeFormatter TIMESTAMP_FORMAT =
DateTimeFormat.forPattern("HH:mm:ss.SSS MMM dd yyyy");
public static DateTime datetime(String timeStamp, String timeZone) {
return TIMESTAMP_FORMAT.withZone(DateTimeZone.forID(timeZone))
.parseDateTime(timeStamp)
.withZone(DateTimeZone.UTC);
}
@Test public void getDatetime() {
assertEquals(new DateTime("2013-01-01T00:35:18.146Z")
.withZone(DateTimeZone.UTC), datetime("00:35:18.146 JAN 01 2013", "GMT"));
}
当詹金斯经营时,我得到:
java.lang.IllegalArgumentException:格式无效:“00:35:18.146 JAN 2013年1月1日“在2013年1月1日”
答案 0 :(得分:2)
这似乎是一个语言环境问题。如果默认语言环境不是英语,它将抛出此类异常。请检查Jenkins默认语言环境。
顺便说一句,您还可以更改代码:将withLocale(Locale.ENGLISH)
添加到格式化程序。
public static DateTime datetime(String timeStamp, String timeZone) {
return TIMESTAMP_FORMAT.withZone(DateTimeZone.forID(timeZone))
.withLocale(Locale.ENGLISH)
.parseDateTime(timeStamp)
.withZone(DateTimeZone.UTC);
}