2016 - 2024

感恩一路有你

MySQL毫秒数不一致为什么日期时间一致

浏览量:2887 时间:2024-01-11 21:55:02 作者:采采

在做项目的过程中,一个小的忽视或粗心可能会导致一个大的问题,甚至浪费过多的时间。我曾经遇到一个问题:含有年月日时分秒的日期在数据库以毫秒数存储,但将不同的毫秒数转换成日期时,却发现它们竟然是同一个日期。这究竟是怎么回事呢?

日期时间格式大小写的原因

经过反复查看SQL语句,我发现问题出在日期时间格式的大小写上。下面通过一个实例来具体说明:

第一步:将一个日期时间转换成毫秒数

首先,我们将一个特定的日期时间转换成毫秒数。例如,我们将"2015-05-09 14:30:56"转换成毫秒数,SQL语句如下:

```

select UNIX_TIMESTAMP('2015-05-09 14:30:56')*1000 as statis_date;

```

结果为:"1431153056000"

第二步:将另一个日期时间转换成毫秒数

接着,我们将另外一个日期时间也转换成毫秒数。例如,我们将"2015-05-09 02:30:56"转换成毫秒数,SQL语句如下:

```

select UNIX_TIMESTAMP('2015-05-09 02:30:56')*1000 as statis_date;

```

结果为:"1431109856000"

第三步:将毫秒数转换成日期时间

然后,我们将第一步中的毫秒数转换回日期时间。例如,我们使用以下SQL语句将毫秒数"1431153056000"转换成日期时间:

```

select FROM_UNIXTIME(1431153056000/1000, '%Y-%m-%d %h:%i:%s') as statis_time;

```

结果为:"2015-05-09 02:30:56"

第四步:将毫秒数转换成日期时间

同样地,我们将第二步中的毫秒数也转换回日期时间。例如,我们使用以下SQL语句将毫秒数"1431109856000"转换成日期时间:

```

select FROM_UNIXTIME(1431109856000/1000, '%Y-%m-%d %h:%i:%s') as statis_time;

```

结果为:"2015-05-09 02:30:56"

日期大小写问题导致的结果一致

在第一步和第二步中,我们明明是用两个不同的日期时间转换成毫秒数,并且毫秒数也是不一致的,但是在第三步和第四步中,将毫秒数转换成日期时却得到了相同的结果。这是为什么呢?

经过查询资料和询问别人,我发现在日期和毫秒数转换时,需要注意大小写的问题。对应的格式字符串中的字母大小写是有含义的,如下:

- "Y"表示年份,大写代表四位数字,小写代表两位数字

- "m"表示月份,大写和小写都表示两位数字

- "d"表示日期,大写和小写都表示两位数字

- "H"表示小时(24小时制),大写和小写都表示两位数字

- "h"表示小时(12小时制),大写和小写都表示两位数字

- "i"表示分钟,大写和小写都表示两位数字

- "s"表示秒钟,大写和小写都表示两位数字

因此,使用不同大小写的格式字符串可能会导致不同的结果。

例如,我们将第三步中的SQL语句中的"%h"改为"%H":

```

select FROM_UNIXTIME(1431153056000/1000, '%Y-%m-%d %H:%i:%s') as statis_time;

```

结果为:"2015-05-09 14:30:56"

可以看到,与第四步的结果不一样了。

结论

在日期转换过程中,务必注意格式字符串中的大小写,确保满足正确的日期格式。否则,在转换时可能会得到意外的结果。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。