gpt4 book ai didi

sql时区计算

转载 作者:行者123 更新时间:2023-12-02 09:00:00 24 4
gpt4 key购买 nike

我有一个存储商店代码及其时区的表。现在根据给定的本地日期,我需要知道转换为存储本地日期的日期是否在周末。现在我已经知道如何获得周末部分了。我正在为转换而苦苦挣扎。我其实很困惑。例如,我的表有以下两个值:

Store / TimeZone(Standard)
100 / 1 (This is frankfurt)
200 / 2 (This is tel aviv)

我们的 sql server 位于洛杉矶。我使用以下代码获取 UTC 日期:

DECLARE @LocalDate DATETIME, @UTCDate DATETIME
SET @LocalDate = GetDate()
-- convert local date to utc date
SET @UTCDate = DATEADD(Hour, DATEDIFF(Hour, GETUTCDATE(), GETDATE()), @LocalDate)

如果我理解的一切正确,我现在可以简单地将所需的时间添加到@UTCDate 以获得该本地时区的@UTCDate,对吗?

对于法兰克福,它将是:

print DATEADD(HOUR, 1, @UTCDate)

现在这会返回法兰克福的 UTCDate。我如何获得法兰克福的本地日期?

编辑:我使用的是 Sql 2005。

Edit2: 仍然让我感到困惑的完整示例:

DECLARE @LocalDate DATETIME, @UTCDate DATETIME
SET @LocalDate = GetDate()
-- convert local date to utc date
SET @UTCDate = DATEADD(Hour, DATEDIFF(Hour, GETUTCDATE(), GetDate()), @LocalDate)
print GetDate()
print @UTCDate
print DATEADD(HOUR, 1, @UTCDate)

输出:

Jan 11 2010 12:32PM
Jan 11 2010 4:32AM
Jan 11 2010 5:32AM

这是否意味着,如果洛杉矶是中午 12:32,那么法兰克福是凌晨 5:32?这似乎是不正确的。在法兰克福应该是晚上 9:32。

最佳答案

您不应该从本地时间开始。直接从 UTC 时间开始:

DECLARE  @UTCDate DATETIME 
SET @UTCDate = GETUTCDATE();

法兰克福比 UTC 早一小时 (UTC + 1) 当夏令时无效时,您一小时:

print DATEADD(HOUR, 1, @UTCDate);

请记住,时区不是以 60 分钟为间隔,孟买是 UTC + 5:30,尼泊尔是 UTC + 5:45。您还必须考虑夏令时,并且这些会定期更改。例如,阿根廷选择根据其水力发电厂储存的水量逐年使用日光。

总结:始终使用 UTC 并将时间本地化留给客户端显示和报告。

关于sql时区计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com