Kotlin/Java SimpleDataFormat提供奇怪的值

Kotlin/Java SimpleDataFormat提供奇怪的值,java,kotlin,simpledateformat,Java,Kotlin,Simpledateformat,这就是我面临的问题。在我的kotlin代码(在Android项目中)中,我有如下内容: val rDate = Util.formatDateAsIso8601(Date()) public static String formatDateAsIso8601(final Date inputDate) { TimeZone tz = TimeZone.getDefault(); mDateFormat.setTimeZone(tz); return mDateForma

这就是我面临的问题。在我的kotlin代码(在Android项目中)中,我有如下内容:

val rDate = Util.formatDateAsIso8601(Date())
public static String formatDateAsIso8601(final Date inputDate) {
    TimeZone tz = TimeZone.getDefault();
    mDateFormat.setTimeZone(tz);
    return mDateFormat.format(inputDate);
}
formatDateAsIso8601(日期输入日期)
是一个Java方法,如下所示:

val rDate = Util.formatDateAsIso8601(Date())
public static String formatDateAsIso8601(final Date inputDate) {
    TimeZone tz = TimeZone.getDefault();
    mDateFormat.setTimeZone(tz);
    return mDateFormat.format(inputDate);
}
在哪里

一旦我得到
rDate
,它就会填充一个对象字段,然后序列化为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”。这个问题偶尔发生。大多数情况下,日期是确定的,但有时也有相当多的这种事情发生的例子,而且它实际上只是相对最近才开始发生。 你知道这是怎么回事吗

--编辑-- 现在,我在每次调用时都创建SimpleDataFormat对象,但仍然会得到这些奇怪的日期值。以下是新的格式方法:

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);
}


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

SimpleDateFormat
时创建新的日期格式对象不是线程安全的,请参见,例如,仅供参考,非常麻烦的旧日期时间类,如和
java.text.SimpleDateFormat
,现在已被java 8及更高版本中内置的类所取代。看。我不是每次调用都创建一个新的SimpleDataFormat,但我仍然会得到这些奇怪的日期。我也不能总是使用新的Java 8东西,因为这是针对Android的。这是针对Android项目的,所以我不能真正使用新的Java 8东西。的确,你可以,当然也应该考虑。java.time是一种现代的线程安全的java日期和时间API,已经进行了后端口。你需要。另请参见。
SimpleDateFormat
不是线程安全的,请参见,例如,仅供参考,非常麻烦的旧日期时间类,例如,
java.text.SimpleDateFormat
,现在已被java 8及更高版本中内置的类所取代。看。我不是每次调用都创建一个新的SimpleDataFormat,但我仍然会得到这些奇怪的日期。我也不能总是使用新的Java 8东西,因为这是针对Android的。这是针对Android项目的,所以我不能真正使用新的Java 8东西。的确,你可以,当然也应该考虑。java.time是一种现代的线程安全的java日期和时间API,已经进行了后端口。你需要。另请参见。或者更好的是,根本不要使用
SimpleDateFormat
。使用JSR310中定义的java.time类替换它们。java.time框架使用不可变对象,并且是线程安全的。这是一个问题,但即使进行了更改,我仍然会得到这些奇怪的日期。我将看看其他java时间类。我也不能总是使用新的java 8东西,因为这是针对安卓的。或者更好的是,根本不要使用
SimpleDataFormat
。使用JSR310中定义的java.time类替换它们。java.time框架使用不可变对象,并且是线程安全的。这是一个问题,但即使进行了更改,我仍然会得到这些奇怪的日期。我将看看其他java时间类。我也不能总是使用新的java 8,因为这是针对安卓的。