1

我正在解析 Reddit RSS 提要并注意到时间是 UTC。服务器位于 EST。服务器位于距 UTC 为 -5 小时的时区。如何将 UTC 时间码转换为 EST?

注意:我还读到 UTC 不遵循夏令时 (DST),稍后我将确定是否使用日期范围调整小时差。

RSS 提要中的 Reddit 项目节点

<item>
<title>blah blah</title>
<link>http://blah.com</link>
<guid isPermaLink="true">http://www.reddit.com/r/blah/comments/blah</guid>
<pubDate>Sun, 16 Sep 2012 21:39:17 -0700</pubDate>
<description>blah description</description>
</item>

到目前为止,我想出了这个:

DECLARE @d DATETIMEOFFSET;
SET @d = 'Sep 2012 21:39:17 -07:00'

DECLARE @off datetime
SET @off = SWITCHOFFSET(@d, '-05:00')

DECLARE @dates TABLE (
converteddate DATETIME
);

insert into @dates (converteddate)
Values (@off)

select * from @dates
4

3 回答 3

3

我的例子似乎是我读过的答案。如果您通过服务器的 UTC 时间偏移来偏移 UTC 时间,您将获得服务器的本地时间。在这种特殊情况下,服务器是 UTC -05:00

在这个例子中,pubDate 的节点是:

Sun, 16 Sep 2012 21:39:17 -0700

我解析 Reddit RSS 提要并将 pubDate 节点作为文本发送到 SQL。我将 pubDate 的字符串重新格式化为:

Sep 2012 21:39:17 -07:00

我想出的存储过程:

--@pubdate was sent to SQL from web app as 'Sep 2012 21:39:17 -07:00'

@pubdate varchar(50)

DECLARE @d DATETIMEOFFSET;
SET @d = @pubdate

DECLARE @off datetime
SET @off = SWITCHOFFSET(@d, '-05:00')

INSERT INTO feed (pubdate)
VALUES (@off)
于 2012-09-20T23:08:29.607 回答
1

您可以将内置 SQL Server 函数 GETDATE() 与 GETUTCDATE() 的结果进行比较,并使用结果调整传入的 RSS 提要日期。有关更多详细信息,请参阅此博客文章:http: //sqlserverperformance.wordpress.com/2007/04/25/one-way-to-convert-from-utc-time-to-local-time/

于 2012-09-17T03:58:21.110 回答
1

DECLARE @Mydate SET @Mydate = DATEADD(minute, DATEDIFF(minute,GETDATE(), GETUTCDATE()), @DateToConvert)

于 2014-03-07T11:36:33.017 回答