java - Timestamp 的 SimpleDateFormat 使用 getTime() 方法失去精度

标签 java timestamp simpledateformat

我有一种方法可以使用 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 tstamp = new Timestamp(date.getTime());

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

有什么方法可以让我的毫秒精度保持在小数点后三位?我意识到我可能会进行某种长度检查并手动添加 0,但最好采用更有效、更标准的方式来保持这种精度

最佳答案

精度没有丢失:尾随的零被简单地截断了。

您可以通过以下方式验证它:

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

关于java - Timestamp 的 SimpleDateFormat 使用 getTime() 方法失去精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791762/

相关文章:

c - 在 VxWorks RTP 上设置和获取系统时间

java - 已签名和带时间戳的 JAR 过期后不起作用

java - 如何将字符串转换为格式为 yyyy-MM-dd HH :MM:ss 的日期

java - 如何获得本地时间(以毫秒为单位)和 UNIX 时间(以毫秒为单位)之间的差异? (从 unixtimestamp 转变)

mmddhhmmss 格式的 java 日期

java - MockMvc:无法解析 andDo(print()) 中的打印方法

java - 如何在 Spring 中向请求上下文添加错误而不是抛出异常

java - Jaxb 2.0 模式验证问题

java - 获取 SoapBody 元素值

sql - 如果超过 78 个字符,则使用 TIMESTAMP 的 TO_CHAR 会引发 ORA-01877