SimpleDateFormat.format() 给出无效日期
SimpleDateFormat.format() gives invalid Date
final static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
此方法生成了无效日期:
public static String getDate(double seconds) {
Date date = new Date((long)(seconds * 1000));
return dateFormat.format(date);
}
不知何故 1465235513.09794
出现在 "2015-06-31T02:33:31.921+0000"
- 有趣的部分是 6 月 31 日。
有线索吗?
瞎猜,你是在多线程程序中使用这个吗?如果是这样,SimpleDateFormat 就不是线程安全的。我宁愿将 dateFormat 移动到 getDate() 方法中。
来自 Javadoc
Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
或按照 Jon Skeet 的建议使用 Java 8 java.time & DateTimeFormatter。
来自Javadoc
A formatter created from a pattern can be used as many times as
necessary, it is immutable and is thread-safe.
或按照 Adrian Shum 的建议使用 Joda 时间(如果您出于某种原因不能使用 Java 8)。
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
double seconds = 1465235513.09794;
Date date = new Date((long)(seconds * 1000)); //1465235513097
String reqDate = dateFormat.format(date);
System.out.println(reqDate); // 2016-06-06T23:21:53.097+0530
如有混淆请参考纪元时间
final static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
此方法生成了无效日期:
public static String getDate(double seconds) {
Date date = new Date((long)(seconds * 1000));
return dateFormat.format(date);
}
不知何故 1465235513.09794
出现在 "2015-06-31T02:33:31.921+0000"
- 有趣的部分是 6 月 31 日。
有线索吗?
瞎猜,你是在多线程程序中使用这个吗?如果是这样,SimpleDateFormat 就不是线程安全的。我宁愿将 dateFormat 移动到 getDate() 方法中。 来自 Javadoc
Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
或按照 Jon Skeet 的建议使用 Java 8 java.time & DateTimeFormatter。
来自Javadoc
A formatter created from a pattern can be used as many times as necessary, it is immutable and is thread-safe.
或按照 Adrian Shum 的建议使用 Joda 时间(如果您出于某种原因不能使用 Java 8)。
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
double seconds = 1465235513.09794;
Date date = new Date((long)(seconds * 1000)); //1465235513097
String reqDate = dateFormat.format(date);
System.out.println(reqDate); // 2016-06-06T23:21:53.097+0530
如有混淆请参考纪元时间