[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的格式:
若要從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();