我有javascript日期對象,它給了我這種格式的日期字符串,「Wed Dec 16 00:00:00 UTC-0400 2009」。Javascript date to C#via Ajax
我通過Ajax把它傳遞給服務器(ASP.NET C#)
我如何轉換, 「星期三12月16日00:00:00 UTC-0400 2009」 到C#DateTime對象。 DateTime.Parse失敗。
我有javascript日期對象,它給了我這種格式的日期字符串,「Wed Dec 16 00:00:00 UTC-0400 2009」。Javascript date to C#via Ajax
我通過Ajax把它傳遞給服務器(ASP.NET C#)
我如何轉換, 「星期三12月16日00:00:00 UTC-0400 2009」 到C#DateTime對象。 DateTime.Parse失敗。
您可以使用DateTime.ParseExact它允許你指定要用於解析格式字符串:
DateTime dt = DateTime.ParseExact("Wed Dec 16 00:00:00 UTC-0400 2009",
"ddd MMM d HH:mm:ss UTCzzzzz yyyy",
CultureInfo.InvariantCulture);
說實話我不會嘗試在C#中解析日期字符串,我個人會嘗試從您的javascript日期對象中創建更有用的日期結構。
例如,你可以在JavaScript將返回表示日期的對象,您可以使用DateTime.Parse()
上轉換爲C#DateTime對象的MS使用parse()
。
最可靠的方法是使用毫秒,因爲時代。通過致電Date.getTime()
,您可以輕鬆地在JavaScript中獲得此信息。然後,在C#中,你可以將其轉換爲這樣的日期時間:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);
你有10000乘以從毫秒到「蜱」,這是100納秒轉換。
我知道這是一個古老的答案,但我確實有一個問題。是否有什麼特別的原因可以添加新的TimeSpan,而不是調用DateTime的'.AddMilliseconds'方法? – Joshua 2011-11-15 17:25:08
沒有理由我記得。我已經編輯了使用'AddTicks'的答案,這可能比'AddMilliseconds'稍微快一點(我們在這裏談論幾個CPU週期)。 – EMP 2011-12-12 09:33:11
我很好奇爲什麼「時代」是1970/01/01。事實證明,這是「Unix時代」。我想我會分享,以防其他人感到好奇或困惑:http://en.wikipedia.org/wiki/Unix_time – 2012-06-20 16:26:06
僅僅爲了後人,爲了幫助未來的Google員工,我想擴展EMP的答案。
EMP的回答提供時間UTC(如果這就是你想要的,使用它)。
要到達客戶端本地時間在C#:
在JavaScript:
var now = new Date();
var UTC = now.getTime();
var localOffset = (-1) * now.getTimezoneOffset() * 60000;
var currentTime = Math.round(new Date(UTC + localOffset).getTime());
在C#:
DateTime currentTimeDotNet = new DateTime(1970, 1, 1).AddTicks(Convert.ToInt64(currentTime) * 10000);
感謝this blog和EMP的答案,但採取了一些在兩端進行試驗和錯誤,以確保未來夥伴的合作。
這是最正確的答案正確處理時區調整。 – 2014-01-15 13:04:35
你的情況,這可能是不可能的,但我真的建議更新JS代碼通過ISO 8601格式的日期/時間。 http://en.wikipedia.org/wiki/ISO_8601
ISO 8601不僅是正式的標準,它也易於使用,並防止很多時區麻煩!
要獲得8601個日期字符串在Javascript:
var d = new Date();
var iso_time = d.toISOString(); //"2014-05-06T18:49:16.029Z"
要閱讀C#8601個日期字符串:
DateTime d = DateTime.Parse(json_string);
+1我不知道你能做到這一點,非常酷:) – Jay 2009-12-10 00:02:06
您可能想使用DateTimeOffset代替。 – ColacX 2016-06-27 08:08:03