Вот проблема, с которой я столкнулся. В моем коде 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);
}