有點我現在無法解決的問題。
我在我的樹莓派上運行了一個不和諧的機器人,它有一個自動訊息系統,在經過一定時間或確切日期后發送。
我的代碼在 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);

uj5u.com熱心網友回復:
如果 RDBMS 型別是,DateTime那么我們為什么要轉換為string然后決議回DateTime?讓我們直接做:
DateTime datetime = Convert.ToDateTime(row["datetime"]);
并讓 .net將 盒裝 DateTime(row["datetime"]型別為object?)轉換為DateTime
uj5u.com熱心網友回復:
有幾個問題——在最高級別,您的 ParseExact 方法遇到與提供的格式不匹配的日期時間字串。
根據您發布的代碼,預期的格式是dd.MM.yyyy HH:mm:ss,并且在您的例外例外中,顯示的日期時間字串 ( 8/2/2021 2:00:00 PM) 不匹配:
- 包含
/并且您預期的格式具有. dd是 2 位數的日期,但輸入的日期時間字串只有個位數的日期MM需要兩位數的月份,而輸入日期時間只有一位數的月份- 字串包含
AM/PM,而您的格式忽略了這一點。
最后,不清楚您的日期格式是 Month Day Year 還是 Day Month year。
第二個問題是,它ParseExact應該包含在一個try/catch塊中,以便您的代碼可以處理傳入意外格式化日期時間字串的情況,而不會崩潰。
要解決此問題,請將您的呼叫包裝到 try/catch 中,并優雅地處理 FormatException
然后確保格式字串與預期的輸入字串匹配。
這是各種 DateTime 格式標記的 .NET 參考
uj5u.com熱心網友回復:
錯誤訊息讓您知道問題所在。
你有 :
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
這本質上是“d/M/yyyy h:mm:ss tt”的格式(假設幾天前幾個月)。
如果您將代碼更改為:
DateTime datetime = DateTime.ParseExact(row["datetime"].ToString(), "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
你應該很高興去。DateTime.ParseExact 做它在罐頭上所說的,它決議日期格式,就像你說的那樣。如果您不確定是否可以使用 DateTime.Parse()(但您有時會遇到日期/月份錯誤的問題)。
使用以下代碼進行測驗:
var myDateString = "8/2/2021 2:00:00 PM";
DateTime datetime = DateTime.ParseExact(myDateString, "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine(datetime.ToString());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/401743.html
下一篇:在沒有身份驗證的外部消費者(應用程式)中使用ASP.NETCore6WebAPIAntiforgeryToken
