2010-12-14 102 views
0

[請投票關閉這個 - 見我最後的評論]日期時間分析問題(DateTime.ParseExact)

嗨,

事情是這樣的:

DateTime.ParseExact("25/12/2008 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

工作正常上我的開發機器,但部署後(服務器)。

我想它與一些時區配置有關。我曾嘗試過:

<%@ ... UICulture="en" Culture="en-US" %> 

無濟於事。請在明信片上提出任何建議。謝謝。

基督教

PS:異常:

字符串未被識別爲有效的DateTime

PPS:我已經更新的問題。我實際上餵了一點時間。對於那個很抱歉!

PPPS: 我現在已經意識到,所有這些都與Excel和oledb有關。字符串25/12/2008在服務器上看起來像這個「12/25/2008 12:00:00 AM」,並且在開發機器上是這樣的「25/12/2008 00:00:00」。我無意中將服務器的時區調整到了英國。我還可以做些什麼?感謝所有這些困惑和遺憾!

+1

它以什麼方式不能正常工作?意外的結果?例外?沒有? – LukeH 2010-12-14 13:35:35

+1

值得注意的是,25/12/2008不適用於en-US的有效日期格式。這並不能解釋本地和部署之間的差異,所以我會留下它作爲評論。 – 2010-12-14 13:39:32

+1

帶有「字符串未被識別爲有效日期時間」的FormatException將是您樣本的預期結果。「在您的開發機器上正常工作」的代碼可能與您的示例不一樣。 – Joe 2010-12-14 13:51:58

回答

4

像這樣的事情

你會做的更好張貼究竟什麼失敗,以及確切的錯誤,而不是 「像」 什麼失敗。因爲你要轉換的字符串(「25/12/2008」,沒有時間)與指定的格式不符(「dd/MM/yyyy hh:mm: SS「)。

在你的格式中使用hh而不是HH也有點奇怪 - hh是一個12小時的時鐘。

我期望以下任何一項工作。

// No time component 
DateTime.ParseExact("25/12/2008", "dd/MM/yyyy", new CultureInfo("en-US")); 

// Works for hours <=12, result is always AM 
DateTime.ParseExact("25/12/2008 11:00:00", "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-US")); 

// Works for hours using 24-hour clock 
DateTime.ParseExact("25/12/2008 13:00:00", "dd/MM/yyyy HH:mm:ss", new CultureInfo("en-US")); 
+0

我已添加PS。我找到了使用谷歌的...... – cs0815 2010-12-14 13:48:21

1

嘗試

DateTime.ParseExact("25/12/2008", "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture); 
+0

這不起作用,但比我目前做的更好。 – cs0815 2010-12-14 13:43:12

+1

如果它不起作用,它會更好嗎? :) – 2010-12-14 13:44:54

+0

我的意思是CultureInfo.InvariantCulture位。 – cs0815 2010-12-14 13:48:57

3

在將字符串解析爲DateTime時,請始終考慮日期可能有一位或兩位數的日期和月份。例如,它可以是MM/dd/yyyy或M/d/yyyy或MM/d/yyyy或M/dd/yyyy。如果您使用ParseExact並且您不考慮這一點,則會發生異常。試試這個:

DateTime date = DateTime.ParseExact(
    dateText, // date in string 
    new string[] { "M/d/yyyy", "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, // formats (you can add more) 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None);