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提供了时间操作 ...
随机推荐
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- 说说Makefile那些事儿
说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...
- CLR 这些年有啥变化吗?
引言 首先想给初学者推荐下<CLR via C#>这本好书,做.Net开发的开发者应该都读一下.为避免广告之嫌,所以这里只提供豆瓣书评的链接. CLR 作为.Net 程序跨平台运行的载体, ...
- 使用ServiceStack构建Web服务
提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...
- jQuery.Ajax IE8 无效(CORS)
今天在开发的时候,遇到一个问题,$.get()在 IE8 浏览器不起作用,但 Chrome,Firefox 却是可以的,网上资料很多,最后发现是 IE8 默认不支持 CORS 请求,需要手动开启下: ...
- 无法访问org.springframework.core.NestedRuntimeException 找不到org.springframework.core.NestedRuntimeException的类文件
在学习springAOP时,出现如下异常: 无法访问org.springframework.core.NestedRuntimeException 找不到org.springframework.cor ...
- ComponentPattern (组合模式)
import java.util.LinkedList; /** * 组合模式 * * @author TMAC-J 主要用于树状结构,用于部分和整体区别无区别的场景 想象一下,假设有一批连锁的理发店 ...
- win10安装blueCFD
blueCFD其实安装起来听简单,不过还是有点问题.最大的问题是该软件没有文档,不过想来也是,人家只是提供一个linux外壳,剩下的工作还是OpenFoam,该干嘛干嘛,也用不着文档.问题在于我们需要 ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- mysql集群(双主)
0.安装 所谓双主基本可以理解为两台服务器互为主备,其核心思路与主备配置相同. 服务器A: 内网IP: 10.44.94.219 服务器B: 内网IP: 10.44.94.97 1.配置服务器A lo ...