2016-10-25 53 views
-3

我知道這已被問了很多次,但似乎沒有涉及我的問題(所有答案指定另一個日期時間格式比給我的問題):TryParse DateTime c#dd/mm/yyyy hh:ss

Convert string(dd/MM/yyyy hh:mm) to datetime format

Converting a String to DateTime

Convert dd/MM/yyyy hh:mm:ss.fff from String to DateTime in C#

具體示例:

輸入一個字符串:24/10/2016 10:20

我打電話DateTime.TryParse(input, out output)

輸出爲DateTime{1/1/0001 12:00:00 AM}

爲什麼?這是我所知道的一個非常有效的輸入格式...

事情我試過/限制:

  • 改變輸入有第二:24/10/2016 10:20:00,它的工作原理
  • 使用TryParseExact,指定此格式,它的工作原理

但是,我不能使用這些解決方案作爲輸入是用戶定義的,我不能強制用戶堅持特定的輸入,並且想要接受任何合理格式化的日期時間。我在問題中指定的格式看起來很合理(這是Excel輸出的默認格式)。

我可以假設文化是en-US

任何幫助,將不勝感激。

更新: 第一個問題的最佳答案會引發一個例外...我不知道爲什麼這個數字甚至會增加。

更新2:

由於有很多親密的請求,這裏有一些最起碼的工作代碼(由莫希特Shrivastava從答案複製):

string dtstr = "24/10/2016 10:20"; 
DateTime outdt; 
DateTime.TryParse(dtstr, out outdt); 
Console.WriteLine(outdt); 
Console.ReadLine(); 

Minimal code

+0

如何使用正則表達式來第一次提取必要的數字? –

+2

你能不能也請顯示你正在運行的代碼段。 –

+0

@MohitShrivastava我正在運行的確切一段代碼是無關緊要的(我給出了一個具體的例子)。但在這裏,如果你想看到它:'DateTime.TryParse(res.StartDateString,out startdate);' – l3utterfly

回答

2

你輸出是1/1/0001 12:00:00 AM,它是DateeTime對象的最小值,這意味着轉換失敗(按照此documentation)。字符串輸入使用當前線程文化隱式提供的當前DateTimeFormatInfo對象中的格式化信息進行分析。所以問題是你傳遞的日期字符串的格式。

嘗試使用TryParseExact方法以更聰明的方式,因爲你知道字符串輸入的格式,如下所示:

string dateString ="24/10/2016 10:20"; 
    string formatString="dd/MM/yyyy HH:mm"; 
    DateTime dateValue; 
    CultureInfo enUS = new CultureInfo("en-US"); // is up to you 
    if (DateTime.TryParseExact(dateString, formatString , enUS, 
           DateTimeStyles.None, out dateValue)) 
0

相同的代碼給我的機器上正確的輸出。

string dtstr = "24/10/2016 10:20"; 
DateTime outdt; 
DateTime.TryParse(dtstr, out outdt); 
Console.WriteLine(outdt); 
Console.ReadLine(); 

You can look at the outdt variable

+0

請參閱我的更新。完全相同的代碼會產生錯誤 – l3utterfly