2012-05-14 144 views
3

我只是想將一個日期字符串更改爲DateTime。格式日期C中的時間#

然而,當我嘗試打印,它總是說,結果是5/31/20098:00:00 AM

任何想法,爲什麼這種事情發生?

namespace Test 
{ 
    class Test 
    { 
     static void Main() 
     { 
      Parse("5/31/2009 12:00:00 AM"); 
     } 

     static readonly string ShortFormat = "M/d/yyyy hh:mm:ss tt"; 

     static readonly string[] Formats = { ShortFormat }; 

     static void Parse(string text) 
     { 
      // Adjust styles as per requirements 
      DateTime result = DateTime.ParseExact(text, ShortFormat, 
                CultureInfo.InvariantCulture, 
                DateTimeStyles.AssumeUniversal); 
      Console.WriteLine(result); 
      Console.WriteLine(result); 
     } 
    } 
} 
+0

我認爲你需要用'M/DD/yyyy'通知日期是兩位數 – V4Vendetta

+6

無人接聽似乎已經注意到了輸出輸入4個小時。 – Oded

+1

你的時區是什麼?您所編寫的代碼假定爲UTC。 –

回答

4

您需要使用DateTimeStyles.NoneDateTimeStyles.AssumeLocal如果你想解析不採取時區的帳戶DateTime

DateTime result = DateTime.ParseExact(text, ShortFormat, 
             CultureInfo.InvariantCulture, 
             DateTimeStyles.None); 

當您使用DateTimeStyles.AssumeUniversal發生自動時區轉換對着電腦的時區。

the documentation

AssumeUniversal - 如果解析字符串中指定任何時區,則假定字符串來表示UTC。

+0

@Downvoter - 關心評論? – Oded

+0

不知道誰是downvoter,但這是一個恥辱唯一的答案,正確閱讀這個問題是downvoted! (從我+1,順便說一句。) –

+0

確定一個接受的答案比第一個答案更好...大聲笑 – ABH

2

我認爲你需要寫日期格式的MM/dd/yyyy hh:mm:ss tt

+3

雖然這並不回答這個問題,但是... – 2012-05-14 12:13:32

0

所有DateTime格式描述爲herehere。您應該改用

static readonly string ShortFormat = "MM/dd/yyyy hh:mm:ss tt"; 
+3

如果你打算讓某人去找文檔,至少要把他們指向**文檔。 – 2012-05-14 12:12:43

0

變化shortformat到

static readonly string ShortFormat = "MM/dd/yyyy hh:mm:ss tt"; 

你的字符串代表這個

"05/31/2009 12:00:00 AM" 
"MM/dd/yyyy hh:mm:ss tt" 

在上面數字對應下面

1

以格式,以便打印DateTime在指定的格式中,您需要使用ToString方法。像這樣。

result.ToString("M/d/yyyy hh:mm:ss tt"); 

第二個參數(format)定義該字符串(S)必須爲它被解析的格式。

0

這取決於你的時區,我認爲你的時區是GMT + 4而不是GMT-4,正如bukko回答。 總之,只要使用方法:的

DateTimeStyles.AssumeLocal 

代替:

DateTimeStyles.AssumeUniversal