[英]Date was not recognized as a valid DateTime
有點問題,我現在無法解決。
我有一個 discord 機器人在我的樹莓派上運行,它有一個自動消息系統,可以在一定時間或確切日期之后發送。
我的代碼在 Windows 在那里調試時工作,但在運行已發布的項目時,控制台會在 Linux 上引發警告。
日期取自我的 MySQL 數據庫中的表並放入 DataTable。 從 DataRow 中獲取日期的代碼是:
DateTime datetime = DateTime.ParseExact(row["datetime"].ToString(), "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
為什么會這樣? 無論我如何格式化字符串(點、破折號或斜杠),警告仍然存在。 不發送消息。
我什至嘗試用正則表達式刪除不可見的空格,也不起作用。 (有問題的正則表達式,雖然我放棄了它,因為它沒有產生任何結果)
Regex.Replace($"{row["datetime"].ToString()}", @"[^\d\s\.:]", string.Empty);
有幾個問題 - 在最高級別,您的 ParseExact 方法遇到與提供的格式不匹配的日期時間字符串。
根據您發布的代碼,預期格式為dd.MM.yyyy HH:mm:ss
,並且在您的異常異常中,顯示日期時間字符串( 8/2/2021 2:00:00 PM
)不匹配:
/
並且您的預期格式有.
dd
是兩位數的日期,但輸入的日期時間字符串只有一位數的天數MM
需要一個兩位數的月份,而輸入的日期時間只有一位數的月份AM/PM
,您的格式忽略了這一點。最后,不清楚您的日期格式是月日年還是日月年。
第二個問題是ParseExact
應該包含在try/catch
塊中,以便您的代碼可以處理傳入的意外格式化日期時間字符串的情況,而不是崩潰。
要解決這個問題,請將您的調用包裝到 try/catch 中,並優雅地處理FormatException
然后確保格式字符串與預期的輸入字符串匹配。
如果 RDBMS 類型是DateTime
那么我們為什么要轉換為string
然后將其解析回DateTime
:
DateTime datetime = Convert.ToDateTime(row["datetime"]);
並讓 .net將裝箱的DateTime
( row["datetime"]
的類型為object
)轉換為DateTime
錯誤消息讓您知道問題所在。
你有:
DateTime datetime = DateTime.ParseExact(row["datetime"].ToString(), "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
值得注意的是,您說日期格式將是“dd.MM.yyyy HH:mm:ss”
然后您的錯誤消息說您無法解析:
8/2/2021 2:00:00 PM
這本質上是“dd/MM/yyyy HH:mm:ss tt”的格式(假設日子在幾個月之前)。
如果您將代碼更改為:
DateTime datetime = DateTime.ParseExact(row["datetime"].ToString(), "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
你應該對 go 好。 DateTime.ParseExact 做它在錫上所說的,它完全按照您所說的方式解析日期格式。 如果您不確定是否可以使用 DateTime.Parse() (但您有時會遇到錯誤的日期/月份問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.