使用DateTimeOffset 对xml中的日期时间格式时区进行处理
在日常使用中难免会与XML打交道,其中一个常用的格式就是日期了。
交互的时候通常有下面2种方式
DECLARE @Doc XML='
<R>
<T>2018-02-22+08:00</T>
<T1>2018-02-22</T1>
</R>
'
其中T1 的时间格式是我们平常比较容易看到的。但是也有小部分的时候会遇到T的时间格式,后面带上时区的时候,就会在取Datetime的时候直接转换成0时区的时间,所以
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的格式的话,可以参考官方文档里面的一样
里面提到这里可以转换成DateTimeOffset 这种格式,然后再转换成DateTime的格式,即可完成这个操作
最终就是2种都可以转成同样的时间格式了。
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