2012-05-03 69 views
0

我的應用程序可以在任何具有任何Windows操作系統的計算機上運行。現在它將與在java中構建的服務器主機休息API進行通信。以utc格式傳遞問題的C#日期時間

我現在想在UTC格式這樣

Console.WriteLine("utc : " + DateTime.UtcNow); 
Console.WriteLine("utc : " + DateTime.Now.ToUniversalTime()); 
Console.WriteLine("normal : " + DateTime.Now); 

其輸出提取時間是這樣的 -

在window7的機器

utc : 03-05-2012 10:48:22 
utc : 03-05-2012 10:48:22 
normal : 03-05-2012 16:18:22 

在Windows Server 2008R2機

utc : 5/3/2012 10:47:35 AM 
utc : 5/3/2012 10:47:35 AM 
normal : 5/3/2012 4:17:35 PM 

現在在服務器機器上,它給了utm時間AM/PM,但是在window7機器上給它沒有AM/PM的時間爲什麼它是這樣的?

是否有將返回在同一格式的所有類型的Windows操作系統的相同UTC時間所以Java的人不會有任何問題解析任何方法?

謝謝

+1

不錯,如果你可以使用'ToString(「s」)''本質上'yyyy-MM-ddTHH:mm:ss'格式 – V4Vendetta

+0

我不知道其他人是如何解析的。他要求我只提供一種格式。無論是AM/PM還是沒有。 – sunder

+0

@sunder我們通常使用這種類型的通信「V4Vendetta建議的」可排序日期/時間模式「 –

回答

0

如果我們使用的ToString(「S」),基本上是YYYY-MM-DDTHH:mm:ss格式,它會給你上具有不同的文化不同的操作系統相同的格式。

我們通常使用這種對於此類通信的「可排序日期/時間模式」。

感謝V4Vendetta和IE徵求意見。

這將有其他人閱讀相同的問題相同的問題。

0

您可以使用Custom Date and Time Format Strings有:

DateTime.ToString("format string", IFormatProvider) 

例子:

DateTime.ToString("dd MM yyyy", CultureInfo.InvariantCulture); 

在上面的代碼中,確保 「格式字符串」 是一個由Java的

+0

未指定要使用的CultureInfo,仍會得到你(可能)不同的字符串。 –

+0

@ Christian.K - 是的,改變了,謝謝。 – logicnp

2

預計這沒什麼必須處理操作系統 - 它與代碼運行的語言環境有關。有可能機器設置了不同的地區,並說明了差異。

如果你需要控制的格式完全相同,那麼你應該通過該DateTime.String(string format)方法手動specifing格式使用自定義格式字符串。

0

指定應該使用日期(應用程序之間商定)

C#序列化日期的具體格式:

Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.UtcNow)); 
Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now.ToUniversalTime())); 
Console.WriteLine("normal : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now)); 

Java來解析日期:

DateFormat formatter = new SimpleDateFormat("d/M/yyyy HH:mm:ss"); 
Date date = (Date) formatter.parse(dateToParse); 
+0

我的朋友這個string.format也沒有返回相同的結果,它的格式就是這樣。在沒有AM/PM的window7和帶有AM/PM的Windows服務器R2上。 現在兩臺機器的格式都相同,只有一臺機器有AM/PM,另一臺沒有。 – sunder

0

一的想法是你可以發送毫秒數的時間,並在Java端將毫秒數轉換爲dateTime。