Datetime 时间戳操作在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中的日期更改时,我执行了插入操作。我认为

我阅读并根据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_时间戳,然后进行转换,或者是数据库内部实现比较时间戳的长值

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。