如该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:

  1. 1706749501481 是一个UNIX时间戳,但它是以毫秒为单位的,而不是传统的以秒为单位。UNIX时间戳通常是自1970年1月1日(UTC)以来的秒数。

  2. 1706749501481 / 1000 这部分将时间戳从毫秒转换为秒,因为FROM_UNIXTIME 函数需要以秒为单位的时间戳。

  3. 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)
    • . 是毫秒前的点分隔符
  4. 1706749501481 % 1000 这部分计算时间戳除以1000的余数,即毫秒部分。

  5. LPAD(1706749501481 % 1000, 3, '0') 这部分使用LPAD函数将毫秒部分填充到3位数,如果不足3位,则在左边填充'0'。例如,如果毫秒部分是481,它就保持不变;如果是81,则变为081;如果是1,则变为001

  6. CONCAT(...) 这部分将FROM_UNIXTIME函数的结果和LPAD函数的结果连接起来,创建一个完整的日期时间字符串,包括毫秒。

  7. AS datetime_with_milliseconds 这部分给结果列命名为datetime_with_milliseconds

综上所述,这个SQL语句将UNIX时间戳(毫秒)转换为一个格式化的日期时间字符串,格式为YYYY-MM-DD HH:MM:SS.mmm,其中mmm是毫秒部分。

 

posted on 2024-02-01 10:11  jarsing  阅读(151)  评论(0)    收藏  举报