Kotlin / Java SimpleDateFormat给出了奇怪的值

问题描述 投票:1回答:1

这是我遇到的问题。在我的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);
}
java kotlin simpledateformat
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.