SimpleDateFormat.format()给出无效的Date

时间:2016-10-27 06:59:45

标签: java datetime-format

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"来自{{1}} - 有趣的部分是6月31日。

有任何线索吗?

2 个答案:

答案 0 :(得分:3)

一个疯狂的猜测,你是在多线程程序中使用它吗?如果是这种情况,SimpleDateFormat不是线程安全的。我宁愿将dateFormat移动到getDate()方法中。 来自Javadoc

  

日期格式未同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问格式,则必须在外部进行同步。

或者使用Java 8 java.time&正如Jon Skeet建议的那样DateTimeFormatter

来自Javadoc

  

从模式创建的格式化程序可以多次使用   必要的,它是不可变的并且是线程安全的。

或者使用Joda时间(如果你出于某种原因不能使用Java 8),就像Adrian Shum所说的那样。

答案 1 :(得分:0)

    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

如果有任何混淆,请参考纪元时间