1

这是一个奇怪的问题。我的基于 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"));
}

当由 Jenkins 运行时,我得到:

java.lang.IllegalArgumentException:无效格式:“00:35:18.146 JAN 01 2013”​​在“JAN 01 2013”​​格式错误

4

1 回答 1

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);
}
于 2013-04-15T10:07:23.033 回答