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提供了时间操作 ...
随机推荐
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed
之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- grep 查找bash脚本中的注释代码
出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...
- mysql 大表拆分成csv导出
最近公司有一个几千万行的大表需要按照城市的id字段拆分成不同的csv文件. 写了一个自动化的shell脚本 在/home/hdh 下面 linux-xud0:/home/hdh # lltotal 1 ...
- Vim使用
模式 ESC\Ctrl+c:退出编辑模式 ZZ\wq:命令模式下保存退出 编辑 i:进入编辑模式 I:转到行首非空字符开始编辑 s:删除当前字符进入编辑模式 a:从当前字符后开始编辑 A:从当前行末非 ...
- BZOJ 2119: 股市的预测 [后缀数组 ST表]
2119: 股市的预测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 331 Solved: 153[Submit][Status][Discuss ...
- C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?
概述 上一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows.Mac和Linux开发一个核心运行时(Core CLR),这也是开源的!I ...