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值。
ABP理论之时间的更多相关文章
- ABP理论之CSRF
返回总目录 本篇目录 介绍 ASP.NET MVC ASP.NET WEB API ASP.NET Core[以后补上] 客户端类库 内部原理 介绍 CSRF[Cross-Site Request F ...
- 进军ABP第一天:ABP理论知识
1.2.3 领域层领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现. ( 实体(Entity ) 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表. ( 仓储(Repo ...
- 万水千山ABP - 时区问题
关于时间和时区问题,后面的参考文章中有详细的描述. 我遇到的问题是: 在MVC视图页面中,显示记录的生成时间 CreationTime <div> @Model.CreationTime ...
- 实战框架ABP
abp及实战框架概述 接触abp也快一年了,有过大半年的abp项目开发经验,目前项目中所用的abp框架版本为0.10.3,最新的abp框架已经到了1.4,并且支持了asp.net core.关于abp ...
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
- ABP框架理论研究总结(典藏版)
目前,我已经完成了Module-Zero的翻译,请查看我的<Module-Zero学习目录>. 到现在为止,使用ABP框架开发正式项目已经3个月有余了,期间翻阅了大量文档资料,包括ABP官 ...
- ABP框架实践基础篇之开发UI层
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...
- ABP框架搭建项目系列教程基础版完结篇
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 经过前面十二篇的基础教程,现在终于该做个总结了. 回顾 第一篇,我们建议新手朋友们先通过ABP官网的启动模板生成解决方案,因为这样 ...
- ABP官方文档翻译 2.6 定时
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...
随机推荐
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- 2017-1-5 天气雨 React 学习笔记
官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- OpenSceneGraph in ActiveX by ActiveQt
OpenSceneGraph in ActiveX by ActiveQt eryar@163.com Abstract. Qt’s ActiveX and COM support allows Qt ...
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- 如何利用pt-online-schema-change进行MySQL表的主键变更
业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键.这种需求在实际生产中还是蛮多的. 下面,看看pt-online-schema-change解决这类问题的处理方式. 首先,创建一张测 ...
- Mysql存储引擎比较
Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- spring boot 部署为jar
前言 一直在ide中敲代码,使用命令行mvn spring-boot:run或者gradlew bootRun来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问 ...
- Dynamics CRM 之ADFS 使用 WID 的独立联合服务器
ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库