Kotlin / Java SimpleDateFormat给出了奇怪的值

时间:2018-11-08 19:14:35

标签: java kotlin simpledateformat

这是我遇到的问题。在我的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 :(得分:4)

SimpleDateFormat不是线程安全的,因此不应共享。在每次formatDateAsIso8601的调用中创建新的日期格式对象。