ABP理論之時間


返回總目錄


本篇目錄

介紹###

雖然有些應用針對的是一個特定的時區,但是也有一些應用針對多個不同的時區。為了滿足這些需求,ABP為datetime操作提供了通用的基礎設施。

Clock###

Clock是用於處理 DateTime類型的主要操作類。它定義了以下靜態屬性和方法:

  • Now:根據當前的provider獲取當前的時間。
  • Kind:獲取當前provider的DateTimeKind。
  • SupportsMultipleTimezone:獲取一個值,該值表明當前的provider可以用於需要多個時區的應用程序。
  • Normalize:根據當前的provider標准化給定的DateTime。

因此,我們可以使用Clock.Now代替DateTime.Now:DateTime now = Clock.Now;

Clock使用了三種不同類型的內置clock providers

  • ClockProviders.Unspecified:這是默認的clock provider。就像DateTime.Now一樣,它會在你沒有使用Clock類時奏效。
  • ClockProviders.Utc:以UTC時間工作。Clock.Now相當於DateTime.UtcNow ,Normalize方法會將一個給定的datetime轉換成utc datetime,並將類別kind設置成DateTimeKind.UTC。它支持多時區。
  • ClockProviders.Local:以本地計算機時間工作。Normalize方法會將一個給定的datetime轉換成一個本地 datetime,並將類別kind設置成DateTimeKind.Local。

要使用不同的clock provider,需要設置Clock.Provider:Clock.Provider = ClockProviders.Utc;

這通常是在應用開始的地方完成的,比如在一個web應用中是在Application_Start方法中完成的。

客戶端

在客戶端可以使用js代碼 abp.clock對象來設置Clock。當在服務端設置了Clock.Provider時,ABP會自動在客戶端設置abp.clock.provider的值

時區###

ABP定義了一個名為Abp.Timing.TimeZone(TimingSettingNames.TimeZone常量)的設置存儲租主、租戶和用戶選擇的時區。ABP假設時區設置值時一個有效的Windows時區Id,也定義了一個將Windows時區轉換成IANA時區的映射文件時區,因為一些公共類庫還在使用IANA時區Id。要支持多時區,必須要使用 UtcClockProvider,因為如果使用了UtcClockProvider,那么所有的datetime值都會以utc存儲,然后所有的datetime都會以UTC形式發送到客戶端。接下來客戶端就可以通過用戶當前的時區設置將UTC時間設置為用戶時區的時間。

客戶端

ABP提供了一個叫做abp.timing.timeZoneInfo的js對象,它包含了當前用戶的時區信息,該信息包含了Windows和IANA時區Id以及一些關於windows時區的其它信息。這些信息可以用於客戶端的datetime轉換。

綁定器和轉換器###

  • ABP會基於當前的clock provider自動標准化從MVC、Web API和ASP.NET Core應用的客戶端接收的DateTime值。
  • 當使用了EF或者NH模塊時 ABP會基於當前的clock provider自動標准化從數據庫接收的DateTime值。

如果使用了UTC clock provider,那么存儲在數據庫中的所有DateTimes都認為是UTC值,從客戶端接收的所有DateTimes都認為是UTC值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM