[C#]DateTime 與 ISO8601 格式字串的相互轉換

[C#]DateTime 與 ISO8601 格式字串的相互轉換

要從DateTime轉換成ISO8601的格式,在.NET中我們有幾種方式,一種是直接帶入ISO8601的Format,像是:

 

一種是帶入s並在最後面加上"Z":

 

最後一種是帶入o:

 

實際程式撰寫會像下面這樣:

            Console.WriteLine(string.Format("{0}Z", dt.ToString("s")));
            Console.WriteLine(dt.ToString("o"));
            Console.WriteLine(dt.ToString(@"yyyy-MM-dd\THH:mm:ss\Z"));

 

運行後可以看到時間正確的轉換為ISO8601的格式:

image

 

若要從ISO8601的字串格式轉換回DateTime,可以使用DateTime.TryParseExact,將ISO8601的格式帶入,像是下面筆者所整理的函式一樣:

        {
            DateTime dt;
            var sucessed = DateTime.TryParseExact(dateTimeString, new string[] { @"yyyy-MM-dd\THH:mm:ss\Z", "o" }, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out dt);

            return sucessed ? new DateTime?(dt) : null;
        }

 

使用起來會像下面這樣:

            var utcDT = dt.Value.ToUniversalTime();

 

            var utcDT = dt.Value.ToUniversalTime();