SimpleDateFormat 转 Timestamp 使用 getTime() 方法导致精度丢失

4

我有一种方法可以使用SimpleDateFormat将一个字符串(yyyy-MM-dd HH:mm:ss.SSS)解析为日期对象。

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,但更高效、标准的方法是首选。


Timestamp#toString() 明确截断尾随的零;您不会失去任何精度。 - DannyMo
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接