Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Azure SQL显示本地时间_Sql Server_Tsql_Timezone_Azure Sql Database - Fatal编程技术网

Sql server Azure SQL显示本地时间

Sql server Azure SQL显示本地时间,sql-server,tsql,timezone,azure-sql-database,Sql Server,Tsql,Timezone,Azure Sql Database,我正在尝试以本地时间显示日期时间值。默认情况下,Azure SQL数据库以UTC格式存储日期和时间,这是无法避免的。(从本地SQL Server迁移时很痛苦。)我希望以中欧时间显示存储的时间值 现在当地时间是11:30(CET)。UTC时间是10:30 DECLARE @TestTime DATETIME; SET @TestTime = '2016-11-02 10:30:00' SELECT @TestTime --Returns 2016-11-02 10:30:00 SELECT @T

我正在尝试以本地时间显示日期时间值。默认情况下,Azure SQL数据库以UTC格式存储日期和时间,这是无法避免的。(从本地SQL Server迁移时很痛苦。)我希望以中欧时间显示存储的时间值

现在当地时间是11:30(CET)。UTC时间是10:30

DECLARE @TestTime DATETIME;
SET @TestTime = '2016-11-02 10:30:00'

SELECT @TestTime
--Returns 2016-11-02 10:30:00
SELECT @TestTime AT TIME ZONE 'Central European Standard Time'
--Returns 02 November 2016 10:30:00 +01:00
我需要以某种方式返回2016-11-02 11:30:00。现在来看有趣的部分:

有人建议:

这很有效,但让我恶心:

SELECT DATEADD(MINUTE,DATEPART(tz,@TestTime AT TIME ZONE 'Central European Standard Time'),@TestTime)
--Returns 2016-11-02 11:30:00
也有人提出了类似的解决方案,但它使用字符串操作。我的怀疑是,在时区出现了问题;它应该显示11:30+1,而不是10:30+1,不是吗

是否真的没有合适的方法在本地时间中显示UTC时间?这种“黑客入侵”感觉非常肮脏,特别是在任何时候它都可能停止工作(例如,Microsoft修复/引入了一个bug)


谢谢

时区
语句执行两种不同的操作:

  • 断言
    datetime
    (或
    datetime2
    )位于特定时区,从而查找该时区的正确偏移量,并返回应用了正确偏移量的
    datetimeoffset

  • 若要
    datetimeoffset
    值转换为不同的时区,请使用与源值的偏移量确定准确的时间点,然后查找请求时区的新偏移量并应用它。这将返回一个
    datetimeoffset
    ,其本地时间和偏移量可能与原始时间和偏移量不同,但表示相同的时间点

  • 您仅使用第一部分。要将
    datetime
    从UTC转换为特定时区,您需要同时使用这两种方法


    时区的第一个
    断言输入的
    datetime
    是UTC格式的,导致偏移量为
    +00:00
    datetimeoffset
    。时区处的第二个
    语句将其转换为请求的时区。

    时区处的
    语句执行两个不同的操作:

  • 断言
    datetime
    (或
    datetime2
    )位于特定时区,从而查找该时区的正确偏移量,并返回应用了正确偏移量的
    datetimeoffset

  • 若要
    datetimeoffset
    值转换为不同的时区,请使用与源值的偏移量确定准确的时间点,然后查找请求时区的新偏移量并应用它。这将返回一个
    datetimeoffset
    ,其本地时间和偏移量可能与原始时间和偏移量不同,但表示相同的时间点

  • 您仅使用第一部分。要将
    datetime
    从UTC转换为特定时区,您需要同时使用这两种方法


    时区的第一个
    断言输入的
    datetime
    是UTC格式的,导致偏移量为
    +00:00
    datetimeoffset
    。时区的第二个
    将其转换为所请求的时区。

    您到底想用什么来显示本地日期和时间?@drediske-in。我想在示例中看到的是11:30。(实际上,我的db有来自其他几个时区的用户,夏令时也开始使用,所以它有点复杂。)它归结为能够将存储的UTC时间值转换为所需的本地时间。我喜欢这些未注释的-1。。。如果选民给了我启发,我很想改进这个问题。我知道你想要CET——我的意思是,你是如何公布数据的?通过使用本地系统时区,您的转换可能比CET硬设置更适合(比如在网页上)。UTC(和云)已取消本地化,您希望撤消此操作。为什么不在最后一刻(比如,在你的网页上)做呢?@drediske哦,我现在明白了。这些时间戳是订单时间。这并不取决于用户的本地设置,而是取决于他们订购的公司所在国。此设置来自DB-每个公司都有一个时区字段。你说的“尽可能晚”是对的。我只是将网站上使用的视图和SP-s放在一起,我不想存储本地化时间。。看到我们的网络开发人员正在从所有的毛孔中渗出,我想我应该减轻他们的负担,提供随时可用的数据。你到底想用什么来显示本地日期时间?@drediske-in。我想在示例中看到的是11:30。(实际上,我的db有来自其他几个时区的用户,夏令时也开始使用,所以它有点复杂。)它归结为能够将存储的UTC时间值转换为所需的本地时间。我喜欢这些未注释的-1。。。如果选民给了我启发,我很想改进这个问题。我知道你想要CET——我的意思是,你是如何公布数据的?通过使用本地系统时区,您的转换可能比CET硬设置更适合(比如在网页上)。UTC(和云)已取消本地化,您希望撤消此操作。为什么不在最后一刻(比如,在你的网页上)做呢?@drediske哦,我现在明白了。这些时间戳是订单时间。这并不取决于用户的本地设置,而是取决于他们订购的公司所在国。此设置来自DB-每个公司都有一个时区字段。你说的“尽可能晚”是对的。我只是将网站上使用的视图和SP-s放在一起,我不想存储本地化时间。。看到我们的网络开发人员正在从所有的毛孔中流血,我想我应该减轻他们的负担,提供随时可用的数据。另外,我注意到你的个人资料上说你在布达佩斯,因此使用
    “中欧标准时间”
    区域更为正确。虽然在这种情况下,有
    SELECT DATEADD(MINUTE,DATEPART(tz,@TestTime AT TIME ZONE 'Central European Standard Time'),@TestTime)
    --Returns 2016-11-02 11:30:00
    
    SELECT @TestTime AT TIME ZONE 'UTC' AT TIME ZONE 'Central European Standard Time'