簡體   English   中英

如何將此 UTC 日期時間字符串轉換為 DateTime object c#

[英]How to convert this UTC datetime string to DateTime object c#

我一直在嘗試將此字符串轉換為 C# 中的 DateTime object

2019-09-23T08:34:00UTC+1

我試過使用 DateTime.Parse 但它拋出了一個異常

“字符串未被識別為有效的日期時間。”

很抱歉,你看起來像是垃圾進垃圾出的受害者。

這是一種不尋常的格式,這就是為什么在我為您提出解決方案之前,我想說的第一件事是“如果可以,請先修復您的輸入”。

假設您無法修復輸入,那么您需要考慮一些事情;

  1. 首先,如果您的字符串包含UTC和/或GMT等部分,則沒有自定義日期和時間格式說明符來解析它們。 這就是為什么您需要將它們作為字符串文字轉義的原因。 有關詳細信息,請參閱此問題
  2. 其次,您的+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.

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