2012年11月27日 星期二

.NET 將系統時間轉換成其他時區的時間

一般來說,使用DateTime.Now可以取得目前程式或網站伺服器所在作業系統內的系統時間.
而作業系統內的系統時間,以我們來說,時區應該就是

(UTC + 8:00)台北,

也就是格林威治時間 + 8小時,就是目前台北(台灣)的時區所在時間,

那如果我們要改成其他時區的時間該怎麼辦?



這時候可以使用TimeZoneInfo的物件來幫忙.
程式碼如下 :


   1:  var localTime = DateTime.Now;
   2:   
   3:  TimeZoneInfo destTz = 
   4:  TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
   5:   
   6:  var pacificTime = 
   7:  TimeZoneInfo.ConvertTime(localTime, TimeZoneInfo.Local, destTz);

首先使用DateTime.Now取得系統時間localTime,

接著宣告TimeZoneInfo物件,使用FindSystemTimeZoneById方法,
提供時區ID當作參數來取得指定地區的時區物件
 (程式碼中指定西歐標準時間)

而時區ID則不是亂打的,可以參考微軟官方文件
http://technet.microsoft.com/en-us/library/cc749073(v=ws.10).aspx

取得該西歐的時區物件物件之後,再利用ConvertTime的方法,參數中提供
1.本地時區時間
2.本地時區物件
3.欲轉換時區物件 (程式碼中指定西歐標準時間)

這樣就可以拿到指定時區所對應的時間了,

接著就可以印出是否有轉換成功,以下程式碼分別列出 台灣,UTC與西歐時間


   1:  Response.Write("(台灣)現在時間" + DateTime.Now + "<br/>");
   2:  Response.Write("(格林威治)現在時間" + DateTime.UtcNow + "<br/>");
   3:  Response.Write("(西歐)現在時間" + pacificTime + "<br/>");

完成後應如下圖:














沒有留言:

張貼留言