zoukankan      html  css  js  c++  java
  • XML中的时间

    在SOA环境中,经常遇到时间,日期错乱的情况

    明明在A端发的日期是2012-05-11,B端却收到2012-05-10, 什么情况?

    原因在于

    .net的反序列化会自动把DateTime类型的字段,转为本地时间

    e.g.

             如果B所在的服务器,本地时区设置为太平洋时间 -7区:

            "2012-10-21"                      转化为         "2012-10-21 12:00:00 AM"

            "2012-10-21-07:00"             转化为         "2012-10-21 12:00:00 AM"

            "2012-10-21+00:00"            转化为         "2012-10-20 17:00:00 PM"

            "2012-10-21+08:00"            转化为         "2012-10-20 09:00:00 AM"

    经过反序列化,21号就神奇地变成了20号

    再经过下面的代码

    date.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture))

    date.ToString("MM/dd/yyyy", DateTimeFormatInfo.InvariantInfo))

    20就这样被传入了C端

    原本以为上面的代码会转成UTC时间再tostring, 其实不会,跟不跟 CultureInfo.InvariantCulture都没有关系,时间不会变,变的只是格式,连接符

    解决方案:

    1. 设属性的类型为String, 不要使用DateTime类型,在发送前用

    date.ToString("yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo))转为String

    接收方用:

    Convert.ToDateTime(dateString, DateTimeFormatInfo.InvariantInfo);转为DateTime.

    2. 使用DataContractSerializer, not XMLSerializer,前者在序列化时,不带时区

    3 如果xsd已经确定,不能更改,属性的类型必须为DateTime,

    发送前,先转为UTC时间,接收时 date.ToUniversalTime().ToString("yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo))

  • 相关阅读:
    五、生产者消费者模型_ThreadLocal
    四、多线程基础-线程池的创建和使用
    spring根据beanName获取bean
    spring容器的功能扩展
    机甲大师S1机器人编程学习,Windows 10 安装Scratch和简单实例学习
    如何建设高可用系统
    详解Condition的await和signal等待/通知机制
    从源码角度彻底理解ReentrantLock(重入锁)
    MySQL 分库分表及其平滑扩容方案
    机甲大师S1机器人编程学习
  • 原文地址:https://www.cnblogs.com/DataFlow/p/2506596.html
Copyright © 2011-2022 走看看