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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM