ABP框架 - 时间

文档目录

 

本节内容:

 

简介

虽然有些应用目标市场只是在一个时区,有些应用目标市场是许多不同时区,为满足这种需求并集中化日期操作,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,除了显式指明。

 

posted @ 2016-10-24 11:47 kid1412 阅读(...) 评论(...) 编辑 收藏