SimpleDateFormat to Timestamp使用getTime()方法失去精度

时间:2013-07-22 15:39:37

标签: java timestamp simpledateformat

我有一个方法使用SimpleDateFormat将String(yyyy-MM-dd HH:mm:ss.SSS)解析为Date对象。

public static Timestamp convertToTimestamp(String stringToFormat) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    try {
        Date date = dateFormat.parse(stringToFormat);
        Timestamp tstamp = new Timestamp(date.getTime());
        return tstamp;
    } 
    catch (ParseException e) {
        return null;
    }
}

但是,当毫秒以0结尾时,例如“2013-07-07 19:15:00.000”,当我执行以下操作将其分配给Timestamp对象时:

Timestamp tstamp = new Timestamp(date.getTime());

输出如下 2013-07-07 19:15:00.0

有没有办法在毫秒上保持三位小数的精度?我意识到我可能会进行某种长度检查并手动添加0,但更有效,标准的方法来保持这种精度将是首选

1 个答案:

答案 0 :(得分:3)

精度不会丢失:尾随的零被简单地截断。

您可以使用以下方式进行验证:

Date dt = new Date();

dt.setTime(123); //123 milliseconds
Timestamp tstamp = new Timestamp(dt.getTime());
System.out.println("tstamp = " + tstamp);

dt.setTime(0); //0 milliseconds => truncated
tstamp = new Timestamp(dt.getTime());
System.out.println("tstamp = " + tstamp);

打印:

tstamp = 1970-01-01 01:00:00.123
tstamp = 1970-01-01 01:00:00.0