标签: timezone

为什么 GetDate AND GETDATE() AT TIME ZONE 'GMT Standard Time' 返回错误的时间?

请看下面的代码:

DECLARE @UKDateTime as DateTime
SELECT @UKDateTime = GETDATE() AT TIME ZONE 'GMT Standard Time' 
print @UKDateTime 
PRINT GETDATE()
Run Code Online (Sandbox Code Playgroud)

这将返回:

Oct  4 2021  4:03PM
Oct  4 2021  4:03PM
Run Code Online (Sandbox Code Playgroud)

目前英国时间为:下午 5:03(由我的电脑时钟确认)。它似乎正在返回 UTC 日期。问题是什么?

我将 SQL Server 设置为 Docker 容器。它是 SQL Server v18.4。

sql-server timezone datetime

7
推荐指数
1
解决办法
8343
查看次数

我的 MySQL 服务器时间与我的服务器时间不同

所以一个月前,我从托管公司购买了一台服务器。

信息是;

Linux Centos(最新版本)。

我安装了 ZPanel,它安装了 phpMyAdmin、MySQL 和所有其他好东西。无论如何,我已经设法将我的服务器时间更改为我的本地时间,即格林威治标准时间。但是,当我尝试在我的 MySQL 服务器上设置它时,它显示了正确的时间,但是当我使用

now()
Run Code Online (Sandbox Code Playgroud)

PHP 中的函数,时间比我的当前时间提前 1 小时存储,这几乎弄乱了我的系统。

有谁知道如何解决这一问题?请已经几个星期了,但没有什么可以解决的:/

谢谢你。

mysql linux timezone

6
推荐指数
2
解决办法
3万
查看次数

如何将“日期”(不是“时间戳”)截断为月份?

Postgresdate_trunctimestampor进行操作interval,并且:

日期和时间类型的值分别自动转换为时间戳或间隔。

换句话说,我们可以使用date_trunc强制转换的date值:

select date_trunc('month',current_date)::date;
??????????????
? date_trunc ?
??????????????
? 2014-12-01 ?
??????????????
Run Code Online (Sandbox Code Playgroud)

但是这个时区是否安全——如果当前日期是夏令时而月份的开始不是,反之亦然会得到正确的日期吗?

postgresql timezone postgresql-9.3

6
推荐指数
1
解决办法
8548
查看次数

为什么 MySQL 在使用 FROM_UNIXTIME 时计算出错误的时间戳

我已经调试了很多,最后设法在 mysql shell 中重现它。

我将时间戳存储在字段类型为 的 mysql 数据库中timestamp。我用来FROM_UNIXTIME()从我的脚本中更新它们,并UNIX_TIMESTAMP()在选择它们时使用。

当我没有在使用SET time_zone =它的连接中设置时区时,它工作正常。但是当我设置时区时,会发生以下情况:

  1. UNIX_TIMESTAMP() 仍然给出正确的结果。
  2. UPDATE table SET field = FROM_UNIXTIME(..) 在数据库中设置错误的值。
  3. 设置的错误值,与服务器时区和连接时区之间的偏移量不对应。服务器时区为亚洲/曼谷 (UTC + 7),连接时区为欧洲/柏林 (UTC + 1)。但是,该值以 1 小时的差异存储,而不是 6 小时。
  4. 再次读取该值时,我得到了错误的值。

我知道是 FROM_UNIXTIME() 不起作用,因为当我打开另一个没有连接特定时区的连接时,我看到错误的值,直到我再次更新它。

它是 1 小时的差异这一事实让我认为这可能是夏令时问题。因为柏林有夏令时而曼谷没有(据我所知)。

这是 mysql shell 的未修改日志,我在其中重现了此行为。

服务器时区是亚洲/曼谷(CIT)

$ mysql -uroot -p timezonetest
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp timezone

6
推荐指数
1
解决办法
1万
查看次数

SQL Server 2014 现在考虑夏令时?

我的计算机/SQL Server 2014 使用比 UTC 时间晚 5 小时的东部时区。但是当我运行以下代码时,我得到了 4 小时的差异。

CREATE TABLE datetimeoffsetfunction(    
                                    servertime DATETIME2,
                                    utc_servertime DATETIME2,
                                    offset_datetime DATETIMEOFFSET,
                                    switch_offset DATETIMEOFFSET,
                                    to_datetime DATETIMEOFFSET
                                      );

INSERT INTO datetimeoffsetfunction
VALUES (  SYSDATETIME(), 
          SYSUTCDATETIME(), 
          SYSDATETIMEOFFSET(),
          SWITCHOFFSET(  SYSDATETIMEOFFSET(),  '+05:00'),
          TODATETIMEOFFSET( SYSDATETIME(), '+05:00')
          );

The result I got is 

servertime:         2016-07-09 23:59:16.4770556
utc_servertime:     2016-07-10 03:59:16.4770556
offset_datetime:    2016-07-09 23:59:16.4770556 -04:00
switch_offset:      2016-07-10 08:59:16.4770556 +05:00
to_datetime:        2016-07-09 23:59:16.4770556 +05:00
Run Code Online (Sandbox Code Playgroud)

servertime 是我的系统时间,考虑到夏令时,我可以解释为什么 servertime 和 utc_servertime 之间只有四个小时的差异。但我确实希望offset_datetime为 2016-07-09 23:59:16.4770556 -05:00除非 SQL Serve 现在考虑了夏令时。

所以我的问题是现在是否自动考虑夏令时是 SQL Server,至少从 …

sql-server t-sql timezone datetime date

5
推荐指数
1
解决办法
7901
查看次数

使用 TIME WITH TIME ZONE 的有效用例是什么?

沿着这个相关问题的思路:

是否有任何有效的实际使用用例 TIME WITH TIME ZONE或应该将其视为反模式?

需要明确的是:我问的是TIME…,而不是TIMESTAMP…

postgresql database-design datatypes timezone time

5
推荐指数
1
解决办法
490
查看次数

如何比较不同时区的时间戳?

例如,我有一个带有时间戳的表:

    2018-04-05 06:00:00 +01
    2018-04-05 06:00:00 +00
    2018-04-05 06:00:00 -01
    2018-04-05 04:00:00 -01
Run Code Online (Sandbox Code Playgroud)

我想要获得的条目是......

BETWEEN 2018-04-05 06:00:00+01 AND 2018-04-05 07:00:00+01
Run Code Online (Sandbox Code Playgroud)

所以我的输出是:

    2018-04-05 06:00:00 +01
    2018-04-05 04:00:00 -01
Run Code Online (Sandbox Code Playgroud)

操作员会BETWEEN自动处理时区差异并为我提供所需的输出吗?

postgresql timestamp timezone

5
推荐指数
1
解决办法
3274
查看次数

在 postgres 中显式保留时区

我一直在研究“查看”时间的不同方式以及如何在 Postgres 中正确映射它,但我仍然不确定实际使用什么。有几篇文章建议或者更确切地说说服您将日期存储为timestamp with time zone,而不是存储为 just timestamp。我尤其在夏令时方面遇到困难。

我的用例是一个简单的面向最终用户的应用程序,只能由“欧洲/柏林”时区的人员访问。用户撰写的帖子会与创建和更新的时间戳一起存储。

假设用户在 上发布了帖子2020-01-01T10:00:00+01。如果用户现在在同一天阅读该帖子,它应该显示posted on 1st of January at 10 am。如果同一篇文章7 月在柏林被点击,它仍然应该显示posted on 1st of January at 10 am“无论夏令时如何”。

我的直觉是将时间存储为 a timestamp without time zone,否则 Postgres 会将该时间转换为 UTC 并以这种方式存储。稍后我将无法参考该帖子发布的实际时区。在这种情况下,它会显示为posted on 1st of January at 11 am(由于柏林现在提前两个小时),如果作者要检查最初的时间,这可能会让他们感到困惑发表了这篇文章。

我的想法是否正确,我是否发现了不使用的极端情况之一timestamp with time zone,或者我在这里错过了一些重要的东西?

postgresql timestamp timezone

5
推荐指数
1
解决办法
1147
查看次数

SQL Server 2012 等效于 AT TIME ZONE 功能

SQL Server 2012 中是否有办法获取特定日期/时间的服务器时区?在 SQL Server 2016 中,您有AT TIME ZONE,但在 2012 年不可用。我有一个datetimeoffset,我需要将其转换为服务器的时区(在那个日期),然后再将其截断为datetime. SWITCHOFFSET仅当您知道偏移量时才有效,但对于每年更改两次时区的服务器,偏移量会来回翻转。

此查询说明了 SQL Server 2016 中的功能:

SELECT @@SERVERNAME AS [SERVERNAME]
    , GETDATE() AT TIME ZONE 'Central Standard Time' AS [GETDATE() AT TIME ZONE 'Central Standard Time']
    , GETDATE() AT TIME ZONE 'Eastern Standard Time' AS [GETDATE() AT TIME ZONE 'Eastern Standard Time']
    , DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard Time' AS [DATEADD(MONTH, -6, GETDATE()) AT TIME ZONE 'Central Standard …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 timezone datetime

5
推荐指数
1
解决办法
167
查看次数

将时间戳列更改为时间戳而不“转换”数据?

似乎将列从 更改为timestamp without time zonetimestamp with time zone根据语句时的当前会话时区转换现有数据alter

\n

请参阅此示例,每个语句后显示输出

\n
create table tztest (col1 timestamp without time zone);\n\nset timezone = 'UTC';\ninsert into tztest (col1) values ('2023-02-01 10:10:10');\nselect col1 as t1, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10    1675246210\n\nset timezone = 'America/New_York';\nalter table tztest alter column col1 type timestamp with time zone;\nselect col1 as t2, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10-05 1675264210\n\nset timezone = 'UTC';\nselect col1 as t3, extract(epoch FROM col1) …
Run Code Online (Sandbox Code Playgroud)

postgresql alter-table timezone

5
推荐指数
1
解决办法
2144
查看次数