ASP.NET MVC 4 部署到 Windows Azure 如何轉換時區設定
由於公司慢慢地開始將新的專案都移往 Windows Azure 雲端平台做網站代管,漸漸地也開始遇到一些小問題,這些問題在還沒上雲端之前通常不會發生,像我們這次遇到的問題就跟顯示時間有關。由於 Windows Azure 雲端平台是全球性、跨國家、跨地域的服務平台,因此,無論是 .NET 執行環境的時區,或是 SQL Database 資料庫的時區,預設都是以UTC 世界標準時間 (Coordinated Universal Time) 為主,也因此在上面執行的網站在顯示時間時,你就會覺得時間好像怪怪的,怎麼都不準。今天我就是要來講怎樣利用 ASP.NET MVC 的 範本檢視(Templated View) 來有效的解決這個問題。
首先,在使用 Azure WebSite 或 Azure Cloud Service 來執行網站時,由於你幾乎無法碰觸到執行環境的任何設定,因此變更系統時區變得不太可能,除非你直接租用 Azure Virtual Machine 才有機會,不過這種執行方式無法提升網站的延展性 (Scalability),且成本也高,因此不太建議直接租用 VM 來執行網站。
也因為你無法修改系統的時區設定,所以,要解決這個方法,只有兩種可能:
- 要儲存到資料庫或其他地方時,先將本地時間轉換成 UTC +8 的時間 (台北標準時間)
- 顯示資料時,再轉換成 UTC +8 的時間 (台北標準時間)
我個人是比較偏好儲存資料時一律使用 UTC 標準時間來儲存,以確保時間的一致性。然後顯示時間時,再利用 .NET 內建的轉換類別進行時區轉換,已顯示適當的本地時間。
註: 以下關於 範本檢視 的基本知識,建議可參考 ASP.NET MVC 4 開發實戰 第7章 View 相關技術。
由於我們在 ASP.NET MVC 裡面,大多是使用以下 Html 範本輔助方法來輸出各種時間:
@Html.DisplayFor(m => m.CreatedOn)
因此,要解決時間顯示的問題,解決的方法非常簡單,只要在 Views\Shared\DisplayTemplates 目錄下新增一個 DateTime.cshtml 檔案,如下圖示:

其 DateTime.cshtml 程式碼內容如下,註解都寫在程式中,各位可以自行到 MSDN 查閱相關說明:
@model DateTime?
@{
if (Model.HasValue)
{
DateTime dtCurrentTime; // 判斷本機的時區設定是否為 UTC 時間,如果是,就要進行轉換,否則就直接顯示本地時間
if (TimeZoneInfo.Local == TimeZoneInfo.Utc)
{
// 以下是取得 "台北標準時區" 的標準寫法
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Taipei Standard Time"); // 依據取得的時區進行時間轉換
dtCurrentTime = TimeZoneInfo.ConvertTime(Model.Value, tzi);
}
else
{
dtCurrentTime = Model.Value;
} @dtCurrentTime.ToString()
}
}
在 ASP.NET MVC 裡面,就這樣簡簡單單的新增一個檔案,整個網站的顯示時間就會全部都自動修正完畢,這也是我經常在課堂上講的【關注點分離】之美! (^_^)
課程公告:[台北市] 招生中,6/9(週日) Will 保哥 ASP.NET MVC 4...六週 開發實戰
§ 備註
如果想得知全球各時區的 id,建議可參考 TimeZoneInfo.GetSystemTimeZones Method 文件,裡面有範例程式可取得所有系統內建的 id 清單,如此一來你就可以利用 TimeZoneInfo.FindSystemTimeZoneById來取得特定地點的時區資訊。
為了方便各位查找,我已經取出所有時區的 id 清單,如有需要的也可以直接剪貼取用:
- Dateline Standard Time
- UTC-11Hawaiian Standard Time
- Alaskan Standard Time
- Pacific Standard Time (Mexico)
- Pacific Standard Time
- US Mountain Standard Time
- Mountain Standard Time
- Mountain Standard Time (Mexico)
- Central America Standard Time
- Central Standard Time
- Central Standard Time (Mexico)
- Canada Central Standard Time
- US Eastern Standard Time
- Eastern Standard Time
- SA Pacific Standard Time
- Venezuela Standard Time
- Paraguay Standard Time
- SA Western Standard Time
- Central Brazilian Standard Time
- Atlantic Standard Time
- Pacific SA Standard Time
- Newfoundland Standard Time
- E. South America Standard Time
- Argentina Standard Time
- Greenland Standard Time
- Montevideo Standard Time
- Bahia Standard Time
- SA Eastern Standard Time
- UTC-02Mid-Atlantic Standard Time
- Azores Standard Time
- Cape Verde Standard Time
- Morocco Standard Time
- UTCGreenwich Standard Time
- GMT Standard Time
- W. Central Africa Standard Time
- Central European Standard Time
- Romance Standard Time
- Namibia Standard Time
- Central Europe Standard Time
- W. Europe Standard Time
- Turkey Standard Time
- South Africa Standard Time
- Syria Standard Time
- E. Europe Standard Time
- Israel Standard Time
- Middle East Standard Time
- FLE Standard Time
- Egypt Standard Time
- GTB Standard Time
- Kaliningrad Standard Time
- E. Africa Standard Time
- Jordan Standard Time
- Arabic Standard Time
- Arab Standard Time
- Iran Standard Time
- Azerbaijan Standard Time
- Georgian Standard Time
- Russian Standard Time
- Caucasus Standard Time
- Mauritius Standard Time
- Arabian Standard Time
- Afghanistan Standard Time
- Pakistan Standard Time
- West Asia Standard Time
- Sri Lanka Standard Time
- India Standard Time
- Nepal Standard Time
- Ekaterinburg Standard Time
- Bangladesh Standard Time
- Central Asia Standard Time
- Myanmar Standard Time
- SE Asia Standard Time
- N. Central Asia Standard Time
- W. Australia Standard Time
- North Asia Standard Time
- China Standard Time
- Taipei Standard Time
- Singapore Standard Time
- Ulaanbaatar Standard Time
- North Asia East Standard Time
- Tokyo Standard Time
- Korea Standard Time
- Cen. Australia Standard Time
- AUS Central Standard Time
- Yakutsk Standard Time
- AUS Eastern Standard Time
- E. Australia Standard Time
- West Pacific Standard Time
- Tasmania Standard Time
- Vladivostok Standard Time
- Central Pacific Standard Time
- UTC+12New Zealand Standard Time
- Kamchatka Standard Time
- Fiji Standard Time
- Magadan Standard Time
- Tonga Standard Time
- Samoa Standard Time
ASP.NET MVC 4 部署到 Windows Azure 如何轉換時區設定的更多相关文章
- 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了 ...
- 使用CSDN Code将网站部署到Windows Azure Website上
在云计算时代,开发和部署应该是完全统一和集成的.在海外,开发者可以用github来管理他们的代码,并且直接部署到Windows Azure上.随着Windows Azure在国内的发布,我们发现,其实 ...
- 网站部署到Windows Azure Website上
使用CSDN Code将网站部署到Windows Azure Website上 在云计算时代,开发和部署应该是完全统一和集成的.在海外,开发者可以用github来管理他们的代码,并且直接部署到Wind ...
- Redmine部署到Windows Azure
有幸,今天可以尝试将Redmine部署到Windows Azure中,记下点滴,方便大家查阅 步骤一:Windows Azure中安装Ubuntu VM 遇到的问题,创建VM时会提示云服务.云存储订阅 ...
- ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
一.创建项目 本篇文章介绍如何将一个ASP.NET Core Web程序部署到Windows系统上.这里以ASP.NET Core WebApi为例进行讲解.首先创建一个ASP.NET Core We ...
- 把Orchard部署到Windows Azure Web Sites
很久前就想做个人站点,主要用来记录自己的生活,我喜欢摄影,烘焙…然后又刚刚入皮坑,这些都可以放在网站上展示一下,或许还能为自己带来收入. 然后手上刚好有Azure的试用,于是乎动力就上来了. 以下是部 ...
- 如何把ASP.NET MVC项目部署到本地IIS上
默认情况下,在VisualStudio中开发网站,会运行在IISExpress中,如果想把网站部署到本地的IIS服务器上该怎么办呢? 一.首先,以管理员身份运行VisualStudio,否则在修改项目 ...
- ASP.NET CORE网站部署到 windows server 的IIS 上去
章基于我自己经验的一个总结,在windows服务器上部署asp.net core网站.环境是 windows server 2012数据中心版本 第一步先安装 IIS 服务器 接下来就是一路下一步,然 ...
- 如何把网站及数据库部署到Windows Azure
http://edi.wang/Post/2014/1/1/deploying-website-with-db-to-azure-custom-domain
随机推荐
- 【java】 java 集合类UML图
- JST(JavaScript Trimpath)前端模板引擎简介
JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...
- UI-动画
// ------------------UIImageView的动画------------------ // ------------------UIView的动画---------------- ...
- asp.net get App_Data 目录几种方法 path
方法一 //ASP.NET MVC1 -> MVC3 string path = HttpContext.Current.Server.MapPath("~/App_Data/some ...
- AppCan做的图片上传代码
存在AppCan里的网页 index.html <!DOCTYPE html> <html class="um landscape min-width-240px min- ...
- android学习笔记30——AndroidMainfest.xml
Manifest.xml文件的职责:指定APP的包名.声明四大组件, 以及启动方式.指定APP运行的进程名称.指定APP权限.指定最小API版本.指定需要连接的库. Manifest.xml的格式:& ...
- Node.js 相关资料网站汇总
地址:https://cnodejs.org/ nodejs中文网:http://nodejs.cn/ nodejs中文网:http://www.nodejs.net/ 相关API地址:http:// ...
- ulipad 常用快捷键
快捷键名称 对应功能 F1 (M)UliPad Help Document(帮助文档) F2 (M)Directory Browser(目录浏览)(3.1版新增) F3 (M)Find Next(查找 ...
- 128. Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- Apache HttpClient
HpptClient特性 1. 基于标准.纯净的java语言.实现了Http1.0和Http1.1 2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE ...