使用DateTimeOffset 对xml中的日期时间格式时区进行处理

在平常使用中不免会与XML打交道,其中一个经常使用的格式就是日期了。sql

交互的时候一般有下面2种方式spa

DECLARE @Doc XML='
<R>
   <T>2018-02-22+08:00</T> <T1>2018-02-22</T1> </R>
'

其中T1 的时间格式是咱们日常比较容易看到的。可是也有小部分的时候会遇到T的时间格式,后面带上时区的时候,就会在取Datetime的时候直接转换成0时区的时间,因此code

DECLARE @Doc XML='
<R>
    <T>2018-02-22+08:00</T>
    <T1>2018-02-22</T1>
</R>
'

SELECT @Doc.value('(R/T)[1]','DateTime') ,        
        @Doc.value('(R/T1)[1]','DateTime')    


2018-02-21 16:00:00.000 
2018-02-22 00:00:00.000

这时候若是须要将T和T1 都转成一致的DateTime的格式的话,能够参考官方文档里面的同样blog

https://docs.microsoft.com/zh-cn/sql/t-sql/functions/cast-and-convert-transact-sql#date-and-time-styles文档

里面提到这里能够转换成DateTimeOffset 这种格式,而后再转换成DateTime的格式,便可完成这个操做io

 最终就是2种均可以转成一样的时间格式了。ast

DECLARE @Doc XML='
<R>
    <T>2018-02-22+08:00</T>
    <T1>2018-02-22</T1>
</R>
'

SELECT CONVERT(DATETIME,@Doc.value('(R/T)[1]','DateTimeOffset')),
       CONVERT(DATETIME,@Doc.value('(R/T1)[1]','DateTimeOffset'))


2018-02-22 00:00:00.000 
2018-02-22 00:00:00.000

 

觉得这种格式咱们平时比较少用到,我也是偶尔遇到才发现,今天和你们分享一下~但愿对你们有帮助function

最后祝~新年快乐~工做顺利class

相关文章
相关标签/搜索