ABP理论之时间

简介:

本篇目录

  • 介绍
  • Clock
  • 时区
  • 绑定器和转换器

    介绍

    虽然有些应用针对的是一个特定的时区,但是也有一些应用针对多个不同的时区。为了满足这些需求,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值。





  • 本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/ABPTiming.html,如需转载请自行联系原作者

目录
相关文章
|
设计模式 前端开发 Java
DTO和VO的区别及使用场景详解
DTO和VO的区别及使用场景详解
6832 1
重置SQLSERVER表的自增列,让自增列重新计数
重置SQLSERVER表的自增列,让自增列重新计数
381 0
|
存储 安全 算法
对象存储服务-Minio
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
1284 1
|
11月前
|
监控 安全 数据挖掘
BPM业务流程管理是什么?有哪些值得推荐的BPM工具?
本文介绍了业务流程管理(BPM)的概念、历史发展及三种类型:以集成为中心、以人为中心和以文档为中心。随后推荐了五款 BPM 工具:板栗看板、Pega、Appian、K2 和 Bonitasoft,分别强调它们在界面设计、规则引擎、低代码开发、灵活集成和开源定制等方面的优势。企业可根据自身需求选择合适的工具优化业务流程。
1152 2
BPM业务流程管理是什么?有哪些值得推荐的BPM工具?
|
12月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`<input type="file">`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
621 15
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的MES生产制造执行系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的MES生产制造执行系统的详细设计和实现(源码+lw+部署文档+讲解等)
202 0
|
前端开发 Docker Windows
Windows 安装 Docker Compose
Windows 安装 Docker Compose
|
Ubuntu Linux Docker
【ClickHouse】深入浅出系列之快速部署ClickHouse
【ClickHouse】深入浅出系列之快速部署ClickHouse
mutex和原⼦锁混⽤导致mutex失效的情况和原因
mutex和原⼦锁混⽤导致mutex失效的情况和原因
|
存储 SQL Linux
ClickHouse(03)ClickHouse怎么安装和部署
本文会介绍如何安装和部署ClickHouse,官方推荐的几种安装模式,以及安装之后如何启动,ClickHouse集群如何配置等。
2292 1