在 XML 日期时间上正确格式化日期时间
Posted
技术标签:
【中文标题】在 XML 日期时间上正确格式化日期时间【英文标题】:Properly Format DateTime on XML Datetime 【发布时间】:2017-12-29 15:30:15 【问题描述】:我正在尝试使用 SQL 上的 XML 序列化来序列化实体。不幸的是,我注意到我的日期时间没有正确读取。我正在返回 24 小时格式,但在 SQL 上,它的读取时间不同。这是确切的 SQL 存储过程:
DECLARE
@XML XML = '- <ArrayEntityView>
- <entEntity>
<dtModifiedDate>2017-07-24T14:09:20.4483795+08:00</dtModifiedDate>
</entEntity>
</ArrayEntityView>'
DECLARE @tblProcAssign TABLE
(
dtmoddate DATETIME
)
INSERT INTO @tblProcAssign
(
dtmoddate
)
SELECT entuserunits.value('dtModifiedDate[1]', 'DATETIME') AS dtModDate
FROM @XML.nodes('ArrayEntityView/entEntity')entUserUnits(entuserunits)
select * from @tblProcAssign
根据上面的代码,我传递了一个日期:
2017-07-24T14:09:20.4483795+08:00
但在 SQL 上,它的读数是:
2017-07-24 06:09:20.447
我不知道为什么,应该是:
2017-07-24 14:09:20.447
数据来自 C# 代码 DateTime.Now。我不想在 SQL 中使用 GetDate,因为有时我不使用 DateTime.Now。我应该如何格式化这个实体或我需要做的任何解析才能得到我的预期结果?
【问题讨论】:
有关日期时间偏移的更多信息请参见此链接docs.microsoft.com/en-us/sql/t-sql/data-types/… 【参考方案1】:如果要识别时区信息,则需要将数据类型从datetime
切换到datetimeoffset
。没有它,只会返回实际的时间值(即UTC)。
确保在表定义和 XML value()
方法中都替换了数据类型:
DECLARE @tblProcAssign TABLE (dtmoddate datetimeoffset);
INSERT INTO @tblProcAssign (dtmoddate)
SELECT entuserunits.value('dtModifiedDate[1]', 'datetimeoffset') AS dtModDate
FROM @XML.nodes('ArrayEntityView/entEntity')entUserUnits(entuserunits);
【讨论】:
以上是关于在 XML 日期时间上正确格式化日期时间的主要内容,如果未能解决你的问题,请参考以下文章