說明:在.NET framework中用來處理日期與時間的class有DateTimeOffset跟DateTime,究竟差在哪?
說明:
DateTime:好像最直覺用來處理時間的class,但有下列缺點:
● 轉UTC或LocalTime時,可能會與預期不符,如:
DateTime dt = new DateTime(2016,2,4,22,0,0);
dt.ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss"); //顯示為2016/2/5 06:00:00
這是因為DateTime內只儲存Ticks(從0001/1/1起的時間單位)跟Kind,此時Kind為Unspecified,呼叫ToLocalTime()將dt視為UTC時間,依據本地電腦時區+8,因此出現該情形。若改為:
DateTime dt = DateTime.Now; //Kind為Local,代表本地時間,ToLocalTime()就ok。
● DateTime.CompareTo(),不會考慮時區,單純比較Ticks。
DateTimeOffset:特定時間需指定時區offset,如:
DateTimeOffset dt = new DateTimeOffset(2016,2,4, 22, 0, 0, new TimeSpan(8,0,0));
若有跨時區轉換,用DateTimeOffset是最保險的做法。
參考資料:
http://blogs.msdn.com/b/davidrickard/archive/2012/04/07/system-datetime-good-practices-and-common-pitfalls.aspx
沒有留言:
張貼留言