使用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的格式的话,可以参考官方文档里面的一样

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

里面提到这里可以转换成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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值