[英]Error converting DateTime to string format yyyy-MM-dd
我正在嘗試將一些DateTime值轉換為字符串格式yyyy-MM-dd
。 問題是我只需要日期,但在我的情況下, model.StartDate
包含日期和時間。 將model.StartDate聲明為字符串“start”時,如下所示: 4/1/2014 12:00:00 AM
。 我在嘗試解析時遇到此錯誤:
用戶代碼未處理System.FormatException Message = String未被識別為有效的DateTime。
我最好的猜測是錯誤發生,因為字符串包含日期和時間,但我可能是錯的。 如果我探索model.StartDate,我還可以找到Day,DayOfTheWeek等。這是正確的方法嗎? 我只想將model.StartDate
轉換為字符串“start”,格式為yyyy-MM-dd
。
繼承我的代碼:
string start = model.StartDate.ToString();
model.StartDate = DateTime.ParseExact(start, "yyyy-MM-dd", CultureInfo.InvariantCulture);
string end = model.EndDate.ToString();
model.EndDate = DateTime.ParseExact(end, "yyyy-MM-dd", CultureInfo.InvariantCulture);
不知道問題是什么,可能是開始包含時間? 我不知道。
model.StartDate和model.EndDate是視圖模型中的DateTime屬性:
[NopResourceDisplayName("Admin.GAStatistics.GAStatistics.StartDate")]
[UIHint("DateNullable")]
public DateTime? StartDate { get; set; }
[NopResourceDisplayName("Admin.GAStatistics.GAStatistics.EndDate")]
[UIHint("DateNullable")]
public DateTime? EndDate { get; set; }
編輯:我在這里上傳了一個圖像,顯示我在調試器中獲得的實際輸出: https ://imageshack.com/i/1n51u2p
謝謝
您正在將日期轉換為字符串,但未指定格式。 嘗試
string start = model.StartDate.ToString("yyyy-MM-dd);
ToString()
使用當前線程的Culture格式將日期轉換為字符串,包括時間。 使用的格式是G
,一般日期和時間格式。
僅針對此格式,您無需指定CultureInfo.InvariantCulture,因為沒有任何特定於文化的內容。 然而, yyyy/MM/dd
格式的常見問題是某些文化使用-
作為日期說明符,而/
是日期占位符。 在這種情況下,您將不得不使用:
string start = model.StartDate.ToString("yyyy-MM-dd,CultureInfo.InvariantCulture);
UPDATE
從注釋中,似乎model.StartDate
和model.EndDate
不是 DateTime對象,而是具有包含時間元素的特定格式的字符串。
您實際上要做的是將原始字符串解析為DateTime對象,然后將此對象格式化為新的格式字符串:
var date=DateTime.ParseExact(model.StartDate,"M/d/YYYY HH:mm:ss tt",
CultureInfo.InvariantCulture);
model.StartDate=date.ToString("yyyy-MM-dd",CultureInfo.InvariantCulture);
假設字符串為2014年4月1日的值“4/1/2014 12:00:00 AM”
您似乎誤解了ParseExact的工作原理(或實際上它的功能)。 通常,解析是獲取類型X的數據並將其轉換為類型Y的過程 - 在DateTime
的上下文中,這意味着將日期string
轉換為DateTime
實例。 這與您嘗試執行的格式化 DateTime
實例完全不同。
鑒於您已經擁有了不需要解析任何內容的日期,您只需格式化日期即可
model.StartDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
CultureInfo.InvariantCulture
在使用固定格式時非常重要,因為您希望確保您不具備文化意識,即您指定的格式正是您希望它在所有文化中顯示的格式。
使用DateTime的.Date
屬性僅獲取Date部分。 你的ToString()也會根據當前的文化產生不同的結果,這意味着你的ToString()和TryParse現在可能適合你,它會在其他國家中斷。
您可以使用ToString()重載來指定特定格式。 這里可以找到不同的格式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.