时钟
ABP提供了一个基本的基础结构,使其变得容易并在可能的情况下自动进行处理. 本文档涵盖了与时间和时区相关的ABP框架服务和系统.
DateTime.Now
返回带有服务器本地日期和时间的 DateTime
对象. DateTime
对象不存储时区信息. 因此你无法知道此对象中存储的绝对日期和时间. 你只能做一些假设,例如假设它是在UTC+05时区创建的. 当你此值保存到数据库中并稍后读取,或发送到不同时区的客户端时,事情就变得特别复杂.
解决此问题的一种方法是始终使用 DateTime.UtcNow
并将所有 DateTime
对象假定为UTC时间. 在这种情况下你可以在需要时将其转换为目标客户端的时区.
IClock
在获取当前时间的同时提供了一种抽象,你可以在应用程序中的单个点上控制日期时间的类型(UTC或本地时间).
示例: 获取当前时间
- 当你需要获取当前时间时注入
IClock
服务. 常用的服务基类(如ApplicationService)已经注入并且做为基类属性提供,所以你可以直接使用Clock
. - 使用
Now
属性获取当前时间.
AbpClockOptions
是用于设置时钟种类的选项类.
示例: 使用 UTC Clock
在你的的 ConfigureServices
方法添加以上内容.
的其他重要功能是规范化 DateTime
对象.
示例用法 :
- 如果当前时钟为UTC,并且给定的
DateTime
为本地时间,将给定的DateTime
转换为UTC(通过使用DateTime.ToUniversalTime()
方法). - 如果未指定给定的
DateTime
的Kind
,将给定的DateTime
的Kind
(使用DateTime.SpecifyKind(...)
方法)设置为当前时钟的Kind
.
当获取的 DateTime
不是由 IClock
创建且可能与当前Clock类型不兼容的时候,ABP框架会使用 方法. 例如;
- ASP.NET Core MVC模型绑定中的
DateTime
类型绑定. - 通过Entity Framework Core将数据保存到数据库或从数据库读取数据.
- 在上使用
DateTime
对象.
DisableDateTimeNormalization Attribute
DisableDateTimeNormalization
attribute可用于禁用所需类或属性的规范化操作.
除了 Now
, IClock
服务还具有以下属性:
Kind
: 返回当前使用的时钟类型(DateTimeKind.Utc
,DateTimeKind.Local
或DateTimeKind.Unspecified
)的DateTimeKind
.
时区
本节介绍与管理时区有关的ABP框架基础结构
ABP框架定义了一个名为 Abp.Timing.Timezone
的设置,可用于为应用程序的用户,租户或全局设置和获取时区. 默认值为 UTC
.
参阅[设置系统]了解更多关于设置系统.
它已使用库实现.