簡體   English   中英

日期未被識別為有效的日期時間

[英]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);

Raspberry 控制台中的警告

有幾個問題 - 在最高級別,您的 ParseExact 方法遇到與提供的格式不匹配的日期時間字符串。

根據您發布的代碼,預期格式為dd.MM.yyyy HH:mm:ss ,並且在您的異常異常中,顯示日期時間字符串( 8/2/2021 2:00:00 PM )不匹配:

  • 包含/並且您的預期格式有.
  • dd是兩位數的日期,但輸入的日期時間字符串只有一位數的天數
  • MM需要一個兩位數的月份,而輸入的日期時間只有一位數的月份
  • 該字符串包含AM/PM ,您的格式忽略了這一點。

最后,不清楚您的日期格式是月日年還是日月年。

第二個問題是ParseExact應該包含在try/catch塊中,以便您的代碼可以處理傳入的意外格式化日期時間字符串的情況,而不是崩潰。

要解決這個問題,請將您的調用包裝到 try/catch 中,並優雅地處理FormatException

然后確保格式字符串與預期的輸入字符串匹配。

這是各種 DateTime 格式標記的 .NET 參考

如果 RDBMS 類型是DateTime那么我們為什么要轉換為string然后將其解析回DateTime

 DateTime datetime = Convert.ToDateTime(row["datetime"]);

並讓 .net裝箱DateTimerow["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.

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