Ошибка формата JodaTime - разные форматы на разных машинах - PullRequest
0 голосов
/ 29 января 2020

Я запускаю следующий код для генерации DateTime

DateTimeFormatter formatter = DateTimeFormat.forPattern(DATE_TIME_FORMAT);
DateTime dt = formatter.parseDateTime("ddMMyyyy");

У меня есть тест, который берет строку и преобразует ее в Joda DateTime, а затем тестирует это значение с ожидаемым значением.

Мой тест проходит на моей машине, но не проходит на другой машине.

Я вижу следующую ошибку для строки 13092019

ime elapsed: 0.189 sec  <<< FAILURE!
org.junit.ComparisonFailure: 
expected:<...ateTime>1970-01-01T0[0]:00:00</common:event...> 
but was:<...ateTime>1970-01-01T0[1]:00:00</common:event...>

Я просто не могу понять, почему и как создаются две разные даты для 13092019

1 Ответ

0 голосов
/ 30 января 2020

Ни ваш ожидаемый, ни ваш наблюдаемый результат не имеют смещения UT C. Поэтому я думаю, что вы, вероятно, хотите LocalDateTime, а не DateTime. Если это так, вот один из способов получить ожидаемый результат, указав 00 в качестве часа дня (а не 01, как заметил JUnit).

private static final String DATE_TIME_FORMAT = "ddMMyyyy";

public static void main(String[] args) {
    DateTimeFormatter formatter = DateTimeFormat.forPattern(DATE_TIME_FORMAT);
    String text = "13092019";
    LocalDateTime ldt = LocalDate.parse(text, formatter)
            .toLocalDateTime(LocalTime.MIDNIGHT);
    System.out.println(ldt);
}

Вывод из программы:

2019-09-13T00: 00: 00.000

[0] и [1] - это просто способ JUnit подчеркнуть разницу между двумя результатами. Все до и после [] одинаково в ожидаемом и фактическом значении. Ни ожидаемое, ни фактическое значение не содержали [ или ] при запуске теста. JUnit добавил их для акцента.

Я просто не могу понять, почему и как генерируются две разные даты для 13092019

Я тоже не могу без Воспроизводимый пример. Scorpioo590, вероятно, правильно, что это проблема часового пояса. Скорее всего, вы также получите другие результаты для других дат. Казалось бы, дата, использованная в вашем прогоне JUnit, была 1970-01-01 (день эпохи)?

...