Kotlin / Java SimpleDateFormat дает странные значения - PullRequest
0 голосов
/ 08 ноября 2018

Вот проблема, с которой я столкнулся. В моем коде kotlin (в проекте Android) у меня есть что-то вроде этого:

val rDate = Util.formatDateAsIso8601(Date())

formatDateAsIso8601(Date inputDate) - это метод Java, который выглядит следующим образом:

public static String formatDateAsIso8601(final Date inputDate) {
    TimeZone tz = TimeZone.getDefault();
    mDateFormat.setTimeZone(tz);
    return mDateFormat.format(inputDate);
}

, где

mDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.ENGLISH);

Как только я получу rDate, он заполняет поле Object и затем сериализуется в json. Проблема в том, что значение даты действительно странное. Первой проблемой, которую я увидел, было получение даты 2018-11-31, которая является недействительной датой. Теперь я вижу значения с дополнительными 0, например, «2018-11-007T20: 09: 26.533-0500» и «2018-0011-007T020: 18: 00.367-0500» и даже «2018-0011-007T020: 27: 22.712-0500. Эта проблема происходит спорадически. В большинстве случаев даты хороши, но иногда случается довольно много случаев, когда это происходит, и это действительно начало происходить сравнительно недавно. Есть идеи, что здесь происходит?

- Изменить - Теперь я создаю объект SimpleDateFormat при каждом вызове, но я все еще получаю эти странные значения даты. Вот новый метод форматирования:

public static String formatDateAsIso8601(final Date inputDate) {
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.ENGLISH);
    TimeZone tz = TimeZone.getDefault();
    dateFormat.setTimeZone(tz);
    return dateFormat.format(inputDate);
}

1 Ответ

0 голосов
/ 08 ноября 2018

SimpleDateFormat не является потокобезопасным, поэтому его нельзя публиковать. Создайте новый объект формата даты в каждом вызове formatDateAsIso8601.

...