我试图从数据库中获取时间戳值,将它们转换为日历,然后将它们转换回时间戳,但是它们失去了精度。

这是重现问题的代码

import java.sql.Timestamp;
import java.util.Calendar;

public class Test {
    public static void main(String[] args)
    {
        Timestamp timestamp = new Timestamp(112, 10, 5, 15, 39, 11, 801000000);
        System.out.println("BEFORE "+timestamp.toString());
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(timestamp.getTime());
        timestamp = new Timestamp(calendar.getTimeInMillis());
        System.out.println("AFTER "+timestamp.toString());
    }
}

这是转换的示例结果
BEFORE 2012-10-18 14:30:13.362001
AFTER 2012-10-18 14:30:13.362

它失去了精度。
我怎样做才能保持十进制值不变?

最佳答案

您将时间设置为毫秒,但您的输入精度为微秒,因此,您当然会失去任何精度不超过毫秒的精度。

日历不支持比毫秒更好的粒度。没有解决方法。

关于java - 在不损失精度的情况下将java.sql.Timestamp转换为java.util.Calendar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13248016/

10-14 14:03