[英]How to convert this UTC datetime string to DateTime object c#
我一直在嘗試將此字符串轉換為 C# 中的 DateTime object
2019-09-23T08:34:00UTC+1
我試過使用 DateTime.Parse 但它拋出了一個異常
“字符串未被識別為有效的日期時間。”
很抱歉,你看起來像是垃圾進垃圾出的受害者。
這是一種不尋常的格式,這就是為什么在我為您提出解決方案之前,我想說的第一件事是“如果可以,請先修復您的輸入”。
假設您無法修復輸入,那么您需要考慮一些事情;
UTC
和/或GMT
等部分,則沒有自定義日期和時間格式說明符來解析它們。 這就是為什么您需要將它們作為字符串文字轉義的原因。 有關詳細信息,請參閱此問題。+1
部分看起來像UTC Offset值。 "z"
自定義格式說明符是您解析它所需要的,但請注意,不建議將此格式說明符與DateTime
值一起使用,因為它不反映實例的Kind
屬性的值。 作為DateTime
的解決方案,您可以像我建議的那樣對其進行解析;
var s = "2019-09-23T08:34:00UTC+1";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal, out dt))
{
Console.WriteLine(dt);
}
它為您提供2019-09-23 07:34:00
作為DateTime
並且將Utc
作為Kind
屬性。
作為DateTimeOffset
的解決方案-由於您的字符串具有 UTC Offset 值,因此您應該考慮使用它而不是Datetime
進行解析-正如 Matt 評論的那樣,您可以使用它的.DateTime
屬性來獲取它的數據;
var s = "2019-09-23T08:34:00UTC+1";
DateTimeOffset dto;
if(DateTimeOffset.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dto))
{
Console.WriteLine(dto.DateTime);
}
它為您提供相同的結果DateTime
但未Unspecified
為.Kind
屬性。
但是,我再次強烈建議您先修復您的輸入。
使用TryParseExact
將字符串轉換為日期時間。 這是將給定格式轉換為日期時間的示例代碼
private static DateTime ParseDate(string providedDate) {
DateTime validDate;
string[] formats = {
"yyyy-MM-ddTHH:mm:ss"
};
var dateFormatIsValid = DateTime.TryParseExact(
providedDate, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out validDate);
return dateFormatIsValid ? validDate: DateTime.MinValue;
}
然后,使用這個 function 來轉換字符串。 我將 UTC+1 替換為空字符串
static void Main(string[] args) {
string strdatetime = "2019-09-23T08:34:00UTC+1";
DateTime dateTime = ParseDate(strdatetime.Replace("UTC+1", ""));
Console.WriteLine(dateTime);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.