Datetime 时间戳操作在UNIX_时间戳或时间戳的可视表示上有效吗
我阅读并根据MySQL文档了解时间戳: 它可以保存从“1970-01-01 00:00:01”(UTC)开始到 “2038-01-19 05:14:07”(UTC)。此范围是由以下原因引起的: 时间戳值为自'1970-01-01'以来的秒数 00:00:00(UTC) 因此,所有与时间戳相关的操作都是在UNIX_timestamp中完成的,因为时间戳中没有存储时区信息。这是我的理解 我的当前时区:IST(+05:30) 午夜后,当IST中的日期更改而UTC中的日期更改时,我执行了插入操作。我认为如果我为IST做一个日期(now()),它应该显示昨天存储的记录,因为我认为UNIX_时间戳将用于时间戳比较,时间戳将保持不变 在下面的代码块中,您可以看到时区偏移为+05:30,表示IST。ID=5的记录于2017年2月13日下午00:04插入。但在联合技术大学,邮票应该是2017年2月12日18小时34分钟(返回5小时30分钟)。因此,UTC中的日期不会更改。我对日期=2017年2月13日做了一个选择声明,我想我会得到(1,2,3,5)条记录,因为IST中2017年2月13日00:00的UTC表示仍然属于2017年2月12日的UTC日期。但我只得到了ID=5的记录 问题1 简而言之,我认为value=2017-02-13将转换为UNIX_时间戳(一个数值),然后进行比较。我错过了什么?或者提及db为生成以下结果而采取的步骤?我希望我能解释我自己 Q.2 java.sql.Timestamp是如何执行的?它的工作原理与代码块中提到的类似,或者它首先将时间戳值转换为unix_时间戳,然后进行转换,或者是数据库内部实现比较时间戳的长值Datetime 时间戳操作在UNIX_时间戳或时间戳的可视表示上有效吗,datetime,calendar,timestamp,mariadb,jodatime,Datetime,Calendar,Timestamp,Mariadb,Jodatime,我阅读并根据MySQL文档了解时间戳: 它可以保存从“1970-01-01 00:00:01”(UTC)开始到 “2038-01-19 05:14:07”(UTC)。此范围是由以下原因引起的: 时间戳值为自'1970-01-01'以来的秒数 00:00:00(UTC) 因此,所有与时间戳相关的操作都是在UNIX_timestamp中完成的,因为时间戳中没有存储时区信息。这是我的理解 我的当前时区:IST(+05:30) 午夜后,当IST中的日期更改而UTC中的日期更改时,我执行了插入操作。我认为
MariaDB [test]>SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +05:30 |
+--------------------+---------------------+
MariaDB [test]> desc t;
+-------+-----------+------+-----+-------------------+---------------- -------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+--------------- --------------+
MariaDB [test]> select * from t;
+------+---------------------+
| id | ts |
+------+---------------------+
| 1 | 2017-02-12 22:10:35 |
| 2 | 2017-02-12 22:10:35 |
| 3 | 2017-02-12 22:13:06 |
| 4 | 2001-07-22 12:12:12 |
| 5 | 2017-02-13 00:04:01 |
+------+---------------------+
MariaDB [test]> select * from t where date(ts) = '2017-02-13';
+------+---------------------+
| id | ts |
+------+---------------------+
| 5 | 2017-02-13 00:04:01 |
+------+---------------------+
MariaDB [test]> set time_zone = '+00:00';
MariaDB [test]> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
MariaDB [test]> select * from t;
+------+---------------------+
| id | ts |
+------+---------------------+
| 1 | 2017-02-12 16:40:35 |
| 2 | 2017-02-12 16:40:35 |
| 3 | 2017-02-12 16:43:06 |
| 4 | 2001-07-22 06:42:12 |
| 5 | 2017-02-12 18:34:01 |
+------+---------------------+
MariaDB [test]> select * from t where date(ts) = '2017-02-12';
+------+---------------------+
| id | ts |
+------+---------------------+
| 1 | 2017-02-12 16:40:35 |
| 2 | 2017-02-12 16:40:35 |
| 3 | 2017-02-12 16:43:06 |
| 5 | 2017-02-12 18:34:01 |
+------+---------------------+
EDIT1:我尝试使用UTC时区和IST的数据库服务器作为应用服务器。午夜后,当IST更改日期而UTC没有更改时,我重复了上述插入和创建操作。以下是记录和信息:
MariaDB [test]> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| UTC | UTC |
+--------------------+---------------------+
1 row in set (0.30 sec)
MariaDB [test]> select * from t ;
+----+---------------------+
| id | ts |
+----+---------------------+
| 1 | 2017-02-13 19:22:15 |
| 2 | 2017-02-13 19:22:15 |
| 3 | 2017-02-13 19:21:40 |
| 4 | 2001-07-22 12:12:12 |
| 5 | 2017-02-14 00:56:13 |
+----+---------------------+
5 rows in set (0.40 sec)
MariaDB [test]> select UTC_TIMESTAMP;
+---------------------+
| UTC_TIMESTAMP |
+---------------------+
| 2017-02-13 19:21:22 |
+---------------------+
1 row in set (0.38 sec)
并使用JDBC来获得响应:
SELECT * FROM t WHERE date(ts) = date(:currentDate);
where, currentDate = Timestamp.from(Instant.now()); from Java
答复是:
[
{
"id": 1,
"timestamp1": 1486993935000
},
{
"id": 2,
"timestamp1": 1486993935000
},
{
"id": 3,
"timestamp1": 1486993900000
}
]
为什么记录(id=5)没有出现?这难道不意味着它会寻找可视化表示,而不是从UTC_时间戳数值中提取日期,如果它这样做的话,它会获取id=5的记录。请将您的屏幕截图转换为纯文本(代码块)。真的没有必要将终端输出作为屏幕截图发布。@markrottveel my bad。我想快照会更好。无论如何,我已经根据你的评论做了更改。Java认为它是什么时区?@rickist only。