MySQL毫秒数不一致为什么日期时间一致
在做项目的过程中,一个小的忽视或粗心可能会导致一个大的问题,甚至浪费过多的时间。我曾经遇到一个问题:含有年月日时分秒的日期在数据库以毫秒数存储,但将不同的毫秒数转换成日期时,却发现它们竟然是同一个日期。这究竟是怎么回事呢?
日期时间格式大小写的原因
经过反复查看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"
可以看到,与第四步的结果不一样了。
结论
在日期转换过程中,务必注意格式字符串中的大小写,确保满足正确的日期格式。否则,在转换时可能会得到意外的结果。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。