2015-06-24 178 views
-2

我收到的日期和時間格式爲:日期時間格式的.Net C#

\/Date(1434013505757-0700)\/ 

我不能找到一種方法,它重新格式化爲人類可讀的格式。

謝謝你在前進,

+2

試着描述一下這是什麼格式。哪裏是年,日,月...... –

+0

你*知道什麼日期/時間價值是*意味着*代表?如果是這樣,請與我們分享這些信息。如果不是,你將如何評估是否有任何答案是正確的? –

+0

作爲一般規則,程序員有責任知道他的程序輸入的來源和格式。所以你有責任找出格式。數據必須來自某個組織某處的某處。您需要遍歷組織樹直到數據源。在我的exp中。問通常有幫助。就我們而言,我們可以推測。 – inquisitive

回答

3

您正在查看由DataContractJsonSerializer生成的Micoroft日期格式。

下面的例子輸出當前日期,然後從你的例子日期時間:

var ser = new DataContractJsonSerializer(typeof(Example)); 
var ex = new Example{ MSDate = DateTime.Now}; 

// write Example to the stream 
var ms = new MemoryStream(); 
ser.WriteObject(ms, ex); 

var cnt = Encoding.UTF8.GetString(ms.ToArray()); 
Debug.WriteLine(cnt); // show wireformat 

ms.Position = 0; 
var exdes = (Example)ser.ReadObject(ms); // read back 

// create our own json stream and deserialize 
var somejsonwithdate = @"{""MSDate"":""\/Date(1434013505757-0700)\/""}"; 

var yourdate = (Example) ser.ReadObject(
     new MemoryStream(Encoding.UTF8.GetBytes(somejsonwithdate))); 

Debug.WriteLine("{0:yyyy-MM-dd h:mm:ss", yourdate.MSDate); 

這裏是DTO類型

public class Example 
{ 
    public DateTime MSDate { get; set; } 
} 

此代碼輸出在我的調試輸出:

{「MSDate」:「/ Date(1435128933854 + 0200)/」}
2015-06-11 11:05:05

從MSDN文章Stand-Alone JSON Serialization

DateTime值顯示爲形式JSON字符串 「/日期(700000 + 0500)/」,其中第一個數字(700000中提供的例子中)是GMT時區中的毫秒數,自1970年1月1日午夜以來的正常(非夏令時)時間。該數字可能爲負數以代表早期時間。示例中由「+0500」組成的部分是可選的,並指示時間爲本地類型,即在反序列化時應轉換爲本地時區。如果它不存在,則將時間反序列化爲Utc。實際數字(本例中爲「0500」)及其符號(+或 - )被忽略。

ASP.NET AJAX客戶端JavaScript代碼自動將這些字符串轉換爲JavaScript DateTime實例。如果有其他字符串具有類似於.NET中類型DateTime的字符串,它們也會被轉換。

只有在轉義字符「/」(即JSON看起來像「/ Date(700000 + 0500)/」)時纔會進行轉換,並且由於此原因WCF的JSON編碼器(由WebHttpBinding啓用)總是轉義「/」字符。

1

這是(最佳猜測)UNIX Timestamp毫秒的分辨率和時區偏移量。

請參閱here關於如何在兩者之間進行轉換。請記住,該示例基於'Second'分辨率,但您的分辨率爲'MilliSecond'。所以使用AddMilliSeconds。

1434013505757-0700 
|<--------->| |--| 
Unix   TimeZone 
TimeStamp  Offset 

希望你能弄清楚自己的代碼。請注意,時區偏移量以小時爲單位。僅供參考Unix-Timestamp定義爲格林威治自1970年1月1日午夜以來經過的秒數(或毫秒)。

+0

這解釋了這些數字,請參閱[DateTime連線格式](https://msdn.microsoft.com/zh-cn/library/bb412170(v = vs.110) ).aspx)'Date('和額外的斜槓來自 – rene

+0

)你是對的,但也要記住時區偏移量是額外的數據,時間戳是基於UTC的,不管呈現什麼偏移量。與其他格式稍有不同,例如ISO8601,其中提交的時間*已經*已經被該偏移量所調整。在這裏,它沒有。 –