ABP官方文档翻译 2.6 定时

定时

介绍

  一些应用只针对一个时区,而其他的一些已用则有许多不同的时区。为了满足这样的需求和集中的时间操作,Abp提供了时间操作的通用基础设施。

时钟

  Clocks是用来操作DateTime值的主要方法。它定义了如下的惊呆属性/方法:

  • Now:根据当前的提供者获取当前时间。
  • Kind:获取当前提供者的DateTimeKind。
  • SupportsMultipleTimezone:获取一个值,指示当前提供者是否可以用于多时区的应用。
  • Normalize:基于当前提供者标准化/转换给定的时间。

  所以,取代使用DateTime.Now,我们使用Clock.Now,实现对时间的抽象:

DateTime now = Clock.Now;

  Clock内部使用时钟提供者。有三种类型的内置时钟提供者:

  • ClockProviders.Unspecified(UnspecifiedClockProvider):这是默认的时钟提供者,与DateTime.Now功能相同。使用它与不使用没有分别。
  • ClockProviders.Utc(UtcClockProvider):使用UTC时间。Clock.Now等同于DateTime.UtcNow。标注化方法将指定时间转换为utc时间,且将类型设置为DateTimeKind.UTC。它支持多时区。
  • ClockProviders.Local(LocalClockProvider):使用本地计算机时间。标准化方法将指定时间转换为本地时间,并将类型设置为DateTimeKind.Local。

  可以设置Clock.Provider,以使用不同时钟提供者:

Clock.Provider = ClockProviders.Utc;

  通常在应用一开始的地方设置。(在web应用的Application_Start方法中比较合适)。

客户端

  Clock可以在客户端使用,在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创建了名为abp.timing.timeZoneInfo的javascript对象,它包含了当前用户的时区信息。这个信息包含Windows和IANA时区Ids,还有一些Windows时区的其他信息。这些信息可以用来转换客户端的时间,并按照客户端的时区显示时间。

Binders和Converters

  • 在MVC、WebAPI和ASP.NET Core应用里,ABP基于当前时钟提供者,自动标准化从客户端接收的时间。
  • 当使用EntityFramewok或NHibernate模块时,ABP基于当前时钟提供者,自动标准化从数据库接收的时间。

  如果UTC时钟提供者被使用,所有存在数据库的时间都为UTC值,所有从客户端接收的时间都假定为UTC,除非显示指定。

 

返回主目录

posted @ 2017-05-03 21:56  Yung2022  阅读(681)  评论(0编辑  收藏  举报