文檔目錄 本節內容: 簡介 時鐘 客戶端 時區 客戶端 綁定器與轉換器 客戶端 客戶端 簡介 雖然有些應用目標市場只是在一個時區,有些應用目標市場是許多不同時區,為滿足這種需求並集中化日期操作,ABP為日期操作提供公共基礎。 時鐘 Clock是與DateTime值合作的主要對象,它定義了以下靜態屬性 ...
本節內容:
雖然有些應用目標市場只是在一個時區,有些應用目標市場是許多不同時區,為滿足這種需求並集中化日期操作,ABP為日期操作提供公共基礎。
Clock是與DateTime值合作的主要對象,它定義了以下靜態屬性/方法:
- Now:通過當前供應器獲取當前時間。
- Kind:獲取當前供應器的DateTimeKind。
- SupportsMultipleTimezone:獲取一個值,指示當前供應器能否支持多時區應用。
- Normalize:把給定的DateTime標準化/轉換成適合當前供應器。
所以,我們用抽象了Colok.Now的DateTime.Now代替DateTime.Now:
DateTime now = Clock.Now;
Clock內部使用了時鐘供應器。有三種內置的時鐘供應器:
- ClockProviders.Unspecified(UnspecifiedClockProvider):預設的時鐘供應器,行為就像DateTime.Now。它使你完全不用Clock類。
- ClockProviders.Utc(UtnClockProvideder):用UTC時間,Clock.Now為DateTime.UtcNow。Normalize(標準化)方法把給定的時間轉換成utc時間,並設它的Kind(種類)為DateTimeKind.Local。
- ClockProviders.Local(LocalClockProvider):用電腦的本地時間,Normailize方法把給定的時間轉換成當地時間,並設置它的種類為DateTimeKind.UTC。它支持多時區。
你可設置Clock.Provider,以便使用一個不同的時鐘供應器:
Clock.Provider = ClockProviders.Utc;
這是在應用程式開始前(在Web應用里就是Application_Start)通常的做法。
通過javascript的abp.clock對象在客戶端使用時鐘,當你在服務端設置Clock.Provider時,ABP會自動在客戶端設置abp.clock.provider的值。
ABP定義了一個名為Abp.Timing.TimeZone設置(TimingSettingNames.TimeZone常量),來存儲被選的宿主時區。ABP假設時區設置的值是一個可用的Windows時區id。同樣定義了一個時區映射文件把一個Windows時區轉換成IANA(互聯網數字分配機構)時區,因為有些公共庫使用的是IANA時區id。為支持多時區必須使用UtcClockProvider。如果使用UtcClockProvider,所有的日期值將存儲為UTC,並用UTC的格式發送給客戶端,然後我們可以在客戶端通過用戶當前時區的設置把UTC日期轉換成用戶的時區。
ABP創建一個Javascript對象,名為abp.timing.timeZoneInfo,為當前用戶包含時區信息。該信息包含Windows和IANA時區id和一些windows時區額外信息。這些信息可用用戶的時區轉換和顯示給用戶。
- 在MVC、Web Api和Asp.new Core項目里,ABP自動把接收到的日期按當前時鐘供應器標準化。
- 當使用EntityFramework或NHibernate模塊時,ABP自動把接收自資料庫的日期按當前時鐘供應器標準化。
如果使用UTC時鐘供應器,所有的存儲在資料庫中的日期都認為是UTC值,和所有接收自客戶端的日期都認為是UTC,除了顯式指明。