如该java代码打印出的时间
public class Main {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis()); // 1706749501481
}
}
通过SQL打印为时间戳
SELECT CONCAT(
FROM_UNIXTIME(1706749501481 / 1000, '%Y-%m-%d %H:%i:%s.'),
LPAD(1706749501481 % 1000, 3, '0')
) AS datetime_with_milliseconds;
结果为:

下来讲解一下这个SQL:
-
1706749501481是一个UNIX时间戳,但它是以毫秒为单位的,而不是传统的以秒为单位。UNIX时间戳通常是自1970年1月1日(UTC)以来的秒数。 -
1706749501481 / 1000这部分将时间戳从毫秒转换为秒,因为FROM_UNIXTIME函数需要以秒为单位的时间戳。 -
FROM_UNIXTIME(1706749501481 / 1000, '%Y-%m-%d %H:%i:%s.')这部分使用FROM_UNIXTIME函数将时间戳转换为日期时间格式。格式字符串'%Y-%m-%d %H:%i:%s.'指定了日期时间的格式,其中:%Y表示四位数的年份%m表示月份(01-12)%d表示天(01-31)%H表示小时(00-23)%i表示分钟(00-59)%s表示秒(00-59).是毫秒前的点分隔符
-
1706749501481 % 1000这部分计算时间戳除以1000的余数,即毫秒部分。 -
LPAD(1706749501481 % 1000, 3, '0')这部分使用LPAD函数将毫秒部分填充到3位数,如果不足3位,则在左边填充'0'。例如,如果毫秒部分是481,它就保持不变;如果是81,则变为081;如果是1,则变为001。 -
CONCAT(...)这部分将FROM_UNIXTIME函数的结果和LPAD函数的结果连接起来,创建一个完整的日期时间字符串,包括毫秒。 -
AS datetime_with_milliseconds这部分给结果列命名为datetime_with_milliseconds。
综上所述,这个SQL语句将UNIX时间戳(毫秒)转换为一个格式化的日期时间字符串,格式为YYYY-MM-DD HH:MM:SS.mmm,其中mmm是毫秒部分。
浙公网安备 33010602011771号