簡體   English   中英

將DateTime轉換為字符串格式yyyy-MM-dd時出錯

[英]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.StartDatemodel.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.

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