簡體   English   中英

將字符串轉換為DateTime格式

[英]converting a string to a DateTime format

我正在嘗試使用以下方法解析09/01/2015 00:00:00格式為yyyy-MM-ddThh:mm:ssZ

DateTime.ParseExact("09/01/2015 00:00:00", "yyyy-MM-ddThh:mm:ssZ", (IFormatProvider)CultureInfo.InvariantCulture);

但我得到的String was not recognized as a valid DateTime

誰能告訴我為什么? 我相信09/01/2015 00:00:00是一個有效的DateTime格式?

來自DateTime.ParseExact

將指定的日期和時間字符串表示形式轉換為其DateTime等效項。 字符串表示形式的格式必須與指定的格式完全匹配,否則拋出異常。

在你的情況下,他們不是。

我假設您的09部分是日期編號,您可以使用dd/MM/yyyy HH:mm:ss格式。

var dt = DateTime.ParseExact("09/01/2015 00:00:00", 
                             "dd/MM/yyyy HH:mm:ss", 
                             CultureInfo.InvariantCulture);

由於CultureInfo 已經 實現了 IFormatProvider ,因此您無需顯式轉換它。

我不明白這一點。 所以這意味着我首先必須糾正我的字符串,其次我可以做一個ParseExact()。 我以為ParseExact可以處理給定的字符串......

ParseExact不是一個可以解析你提供的任何格式化字符串的神奇方法。 只有當您的字符串和格式根據您使用的文化設置完全匹配時,它才能處理。

試試這段代碼:

var text = "09/01/2015 00:00:00";
var format = "dd/MM/yyyy HH:mm:ss";
var dt = DateTime.ParseExact(text, format, (IFormatProvider)CultureInfo.InvariantCulture);

您會注意到格式必須在結構上與您嘗試精確解析的文本匹配 - 因此該方法的ParseExact名稱。

格式不匹配,您需要將09/01/2015更改為2015-01-09或將yyyy-MM-dd部分更改為dd/MM/yyyy

ParseExact方法不是將任何日期格式轉換為另一種日期格式的終極方法,它只是使用提供的格式將給定字符串解析為日期時間。 因此,如果您的inout與此格式不匹配,則該方法將拋出該異常。

由於日期時間在內部只是一個數字,因此根本不需要將一種格式轉換為另一種格式,因此只要您知道輸入格式,就可以從中構建日期,這與您可能需要的任何格式無關。當您想要將該日期打印到輸出時。 在這種情況下,您將需要一個格式化程序。

正如大多數人所說,錯誤來自這樣一個事實,即字符串格式的日期與您所說的格式不符。您說09/01/2015 00:00:00的格式為“yyyy” -MM-ddThh:mm:ssZ“,它不是,因此錯誤。 要糾正這個問題,您需要更改字符串所在的格式,或者更有可能更改日期所在的格式。所以將“yyyy-MM-ddThh:mm:ssZ”更改為“dd / MM / yyyy HH:MM:SS”。

從長遠來看,你是如何到達那個日期的? 格式是否可能改變(輸入但用戶)? 如果是這樣,最好嘗試避免拋出錯誤並使用TryParseExact更好地處理它。 為了充分利用這一點,我通常會輸出一個可為空的DateTime,然后檢查它是否為null。 如果你不這樣做,那么如果解析失敗,它只會使輸出日期時間成為最小值。

這樣的事情應該有效:

public DateTime? StringToDate (string dateString, string dateFormat)
{
    DateTime? dt;
    DateTime.TryParseExact(dateString, dateFormat, null, System.Globalization.DateTimeStyles.None, out dt);
    return dt;
}

然后你可以像這樣使用它:

DateTime? MyDateTime = StringToDate("09/01/2015 00:00:00", "dd/MM/yyyy HH:mm:ss");

if(MyDateTime != null)
{
    //do something
}

另一種簡單的方法......

var dt = Convert.ToDateTime(Convert.ToDateTime("09/01/2015 00:00:00").ToString("yyyy-MM-ddThh:mm:ssZ"))

暫無
暫無

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

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