我正在解析Reddit RSS Feed,并注意到时间是UTC。服务器位于EST中。服务器位于距UTC的-5小时的时区内。如何将UTC时间码转换为EST?
注意:我还读到UTC不遵循夏令时(DST),我将通过使用日期范围来确定是否稍后调整小时差。
rss feed中的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
答案 0 :(得分: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)
答案 1 :(得分:1)
您可以将内置SQL Server函数GETDATE()的结果与GETUTCDATE()进行比较,并使用结果调整传入的RSS提要日期。有关详细信息,请参阅此博客文章:http://sqlserverperformance.wordpress.com/2007/04/25/one-way-to-convert-from-utc-time-to-local-time/
答案 2 :(得分:1)
DECLARE @Mydate SET @Mydate = DATEADD(分钟,DATEDIFF(分钟,GETDATE(),GETUTCDATE()),@ DateToConvert)