java - Kotlin/Java 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'。这个问题偶尔发生。大多数时候日期都很好,但有时会发生很多这样的事情,而且它实际上只是最近才开始发生。有什么想法吗?
--Edit-- 我现在每次调用都创建 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);
}
解决方案
SimpleDateFormat
不是线程安全的,因此不应共享。在每次调用中创建新的日期格式对象formatDateAsIso8601
。
推荐阅读
- node.js - 在 TypeORM 和 NestJS 中连接表时出错
- python - 从资源管理器中选择一个文件并将他的名字插入 python kivy 应用程序
- linux - 如何构建带有-generic 后缀的linux内核?
- matlab - Matlab上两个符号数组的卷积
- google-bigquery - Bigquery DR 投诉和多区域支持
- java - 筹码的额外结束和开始保证金
- php - 如何对前缀中包含当前年份的数字进行排序
- laravel - 为什么用户凭据在我的登录单元测试中不起作用?
- vue.js - 无法使用“import * as name from './module', webpack 在 Vue 中返回错误
- django - TweepError at / Unable to access file: No such file or directory when I use can