在我的日志中,我使用的是:(java.sql.Timestamp)

 new Timestamp(System.currentTimeMillis())


它的行为很奇怪(恕我直言):


当System.currentTimeMillis()= 1490713735960


  它返回:2017-03-28 17:08:55.96



我预计会有:2017-03-28 17:08:55.960结尾为0


当System.currentTimeMillis()= 1490713724721


  它返回:2017-03-28 17:08:44.721


符合预期


问题:

这是new Timestamp()的正常行为吗?

为什么终止的零被丢弃?

最佳答案

因此,是的,这是正确的行为。因为纳秒部分的toString()方法的实现是:

if (nanos == 0) {
    nanosString = "0";
} else {
    nanosString = Integer.toString(nanos);
    ...
}


else部分:

// Truncate trailing zeros
char[] nanosChar = new char[nanosString.length()];
nanosString.getChars(0, nanosString.length(), nanosChar, 0);
int truncIndex = 8;
while (nanosChar[truncIndex] == '0') {
    truncIndex--;
}

nanosString = new String(nanosChar, 0, truncIndex + 1);


看一下java.sql.Timestamp.toString()方法的源代码

10-06 09:08