ABP官方文件 十二 時間與時區設定

2021-08-10 03:08:59 字數 2762 閱讀 8402

雖然有些應用的需求是單時區,然而另一些是需要對不同的時區進行處理的。為了滿足這樣的需求以及對時間的處理。abp提供了處理時間操作的通用基礎設施。

clock這個類是主要用來處理datetime的值。它具有以下靜態屬性和方法:

所以我們不應該使用datetime.now,而是使用clock.now,如下所示:

datetime now = clock.now;
abp中內建了3種provider,如下所示:

為了支援多時區轉換,你可以設定clock.provider為:

clock.provider = clockproviders.utc

;

我們可以在客戶端指令碼中使用abp.clock, 當你在伺服器端設定好clock.provider,abp 會自動的在客戶端設定好abp.clockprovider。abp建立了乙個指令碼物件:abp.timing.timezoneinfo它包含了當前使用者所設定的時區資訊。這個資訊包含了windows和iana時區的id和一些額外的windows時區資訊,詳細請檢視原始碼 timingscriptmanager 的getuserstimezonescriptsasync函式。使用這些資訊可以將伺服器的utc時間轉換為客戶端需要顯示的時間。

注意:在客戶端進行時間轉換,首先你得設定你的應用預設為utc,並且每個使用者可以設定自己的時區,這個預設是使用settingmanager來設定的。然後你可以使用monent的timezone外掛程式將伺服器端時間轉換為本地時間。首先全域性設定:moment.tz.setdefault(abp.timing.timezoneinfo.iana.timezoneid); 然後你通過動態api,或者webapi取得json後,將json中的時間如此轉換: moment(item.creationtime).format(『lll』),或者可以這樣: abp.timing.converttousertimezone(datetime).format(); 前提是你要使用abp.moment.js。作者的文件寫的也不是很好,這是我開發過程中結合原始碼補充的。如果要為每個使用者設定不同的時區,最好是將時區資訊儲存到使用者表,登入的時候儲存到claim中。那麼在mvc中轉換的時候我們就可以用到 timezonehelper.convertfromutc 。詳細可以見提問:

如果使用使用者表來儲存每個使用者的時區,最好是自定義乙個abpsession:

public

inte***ce icustomabpsession : iabpsession

string impersonatortimezoneid

string getuserstimezonescript();

}public

class customabpsession : claimsabpsession, icustomabpsession

public

virtual

string timezoneid

}public

virtual

string impersonatortimezoneid

}//使用這個**來重置 timingscriptmanager.cs 的getuserstimezonescriptsasync函式取得的指令碼。

//當然需要在_layout.cshtml 中呼叫這個方法,如果不想這樣寫,也可以繼承itimingscriptmanager介面,重新實現它。

public

virtual

string

getuserstimezonescript()

," +

" iana: ," +

" }";

return

" abp.timing.timezoneinfo = " + timezoneinfo;

}}

abp定義了乙個abp.timing.timezone (常量:timingsettingnames.timezone)配置名,用來儲存host,tenant和user所選擇的時區。abp假定設定的時區是乙個有效的windows timezone name。abp也定義了乙個時區對映檔案,將windows時區轉換為iana時區,這是因為有些通用庫所使用的是 iana timezone id。為了支援多時區,必須使用utcclockprovider。如果使用utcclockprovider,那麼所有的時間值將會以utc時間進行儲存,並且以utc時間傳送到客戶端。那麼在客戶端我們能將utc時間轉換為客戶所設定的時區。

注意: 我遇到過這樣的問題,在windows server 2012 如果系統的時區是協調世界時(coordinated universal time)。並且預設使用者時區是系統時區時,timezoneinfo.findsystemtimezonebyid(timezoneid),abp中取得iana時區會報異常。

如果utcclockprovider被使用,所有的時間都會作為utc時間儲存在資料庫。並且所有來自客戶端的時間都會被當做utc時間來接收除非被明確的指定為其他時區。

ABP官方文件翻譯 3 5 規約

規約 建立規範類 使用倉儲規約 組合規約 討論介紹 規約模式是一種特別的軟體設計模式,通過使用布林邏輯將業務規則鏈結起來重新調配業務規則。維基百科 尤其是,它通常用來為實體或其他業務物件定義可復用的過濾器。示例 在這個部分,我們將看到規約模式的必要性。本部分是通用的,和abp的實現沒有必然的關係。假...

ABP官方文件 三 模組系統

abp框架提供了建立和組裝模組的基礎,乙個模組能夠依賴於另乙個模組。在通常情況下,乙個程式集就可以看成是乙個模組。在abp框架中,乙個模組通過乙個類來定義,而這個類要繼承自abpmodule。模組系統當前專注於服務端而不是客戶端。譯者注 如果學習過orchard的朋友,應該知道module模組的強大...

ABP官方文件 四 啟動配置

在應用啟動之前,abp框架提供了模組基本的配置和方法,大家參照下面這個例子就可以了。public class tasksystemmodule abpmodule public override void initialize 和orchard類似,abp框架一開始就被設計成模組化的,不同的模組可以...