如该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
是毫秒部分。