簡體   English   中英

C#中的日期和時間轉換 - DateTime.ParseExact()無法按預期工作

[英]Date and time conversion in C# - DateTime.ParseExact() not working as expected

我有日期/時間格式,例如:“1-Mar-13 92230”根據此文件此鏈接 ,格式如下:“d-MMM-yy Hmmss”,因為:

Day is single digit, 1-30
Month is 3 letter abbreviation, Jan/Mar etc.
Year is 2 digits, eg 12/13
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09)
Minute is standard (eg 01, 52)
Second is standard (eg 30, 02)

我正在嘗試在我的程序中運行以下代碼,但我不斷收到“String未被識別為有效DateTime”的錯誤。

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture);

請幫助,我對DateTime轉換不太熟悉,但我看不出我在哪里出錯了。 謝謝!

更新:這是因為沒有冒號之間的時間無法解析? (例如1-Mar-13 9:22:30被解析,但我有一個外部數據源,無法從Hmmss重寫為H:mm:ss)

你可以修改你的約會日期:

var parts = "1-Mar-13 92230".Split(' ');

if (parts[1].Length == 5)
{
    parts[1] = "0" + parts[1];
}

var newDate = parts[0] + " " + parts[1];

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss",  System.Globalization.CultureInfo.CurrentCulture);

來自msdn

如果format是不包含日期或時間分隔符的自定義格式模式(例如“yyyyMMdd HHmm”),請使用provider參數的不變區域性和每個自定義格式說明符的最寬格式。 例如,如果要在格式模式中指定小時數,請指定更寬的形式“HH”,而不是更窄的形式“H”。

所以你可以嘗試:

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture);

您的輸入字符串必須是以下格式

string input = "1-Mar-13 092330";

如果你回到你的鏈接,它說

H   24-hour clock hour (e.g. 19)

現在H是24小時,它應該以前導0表示。如果不能想象你將如何處理小於9的小時數,即兩位數的情況。

如果不是,你的小時和分鍾和秒必須分開。

string input = "1-Mar-13 9 2330";

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture);

你的小時分和秒需要分開,因為它們沒有得到區分。

string input = "1-Mar-13 9 23 30";
        var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss",   System.Globalization.CultureInfo.CurrentCulture);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM