返回总目录


本篇目录

介绍

虽然有些应用针对的是一个特定的时区,但是也有一些应用针对多个不同的时区。为了满足这些需求,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理论之时间的更多相关文章

  1. ABP理论之CSRF

    返回总目录 本篇目录 介绍 ASP.NET MVC ASP.NET WEB API ASP.NET Core[以后补上] 客户端类库 内部原理 介绍 CSRF[Cross-Site Request F ...

  2. 进军ABP第一天:ABP理论知识

    1.2.3 领域层领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现. ( 实体(Entity ) 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表. ( 仓储(Repo ...

  3. 万水千山ABP - 时区问题

    关于时间和时区问题,后面的参考文章中有详细的描述. 我遇到的问题是: 在MVC视图页面中,显示记录的生成时间 CreationTime <div> @Model.CreationTime ...

  4. 实战框架ABP

    abp及实战框架概述 接触abp也快一年了,有过大半年的abp项目开发经验,目前项目中所用的abp框架版本为0.10.3,最新的abp框架已经到了1.4,并且支持了asp.net core.关于abp ...

  5. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  6. ABP框架理论研究总结(典藏版)

    目前,我已经完成了Module-Zero的翻译,请查看我的<Module-Zero学习目录>. 到现在为止,使用ABP框架开发正式项目已经3个月有余了,期间翻阅了大量文档资料,包括ABP官 ...

  7. ABP框架实践基础篇之开发UI层

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...

  8. ABP框架搭建项目系列教程基础版完结篇

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 经过前面十二篇的基础教程,现在终于该做个总结了. 回顾 第一篇,我们建议新手朋友们先通过ABP官网的启动模板生成解决方案,因为这样 ...

  9. ABP官方文档翻译 2.6 定时

    定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...

随机推荐

  1. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  2. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  3. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  4. 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed

    之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...

  5. Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  6. grep 查找bash脚本中的注释代码

    出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...

  7. mysql 大表拆分成csv导出

    最近公司有一个几千万行的大表需要按照城市的id字段拆分成不同的csv文件. 写了一个自动化的shell脚本 在/home/hdh 下面 linux-xud0:/home/hdh # lltotal 1 ...

  8. Vim使用

    模式 ESC\Ctrl+c:退出编辑模式 ZZ\wq:命令模式下保存退出 编辑 i:进入编辑模式 I:转到行首非空字符开始编辑 s:删除当前字符进入编辑模式 a:从当前字符后开始编辑 A:从当前行末非 ...

  9. BZOJ 2119: 股市的预测 [后缀数组 ST表]

    2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 331  Solved: 153[Submit][Status][Discuss ...

  10. C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?

    概述 上一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows.Mac和Linux开发一个核心运行时(Core CLR),这也是开源的!I ...