Introduction

While some applications target a single timezone, some others target to many different timezones. To satisfy such needs and centralize datetime operations, Abp provides common infrastructure for datetime operations.

一些应用目标一个时区,另一些目标的许多不同的时区。为了满足这种需要,集中时间操作,abp提供了日期时间操作的公共基础。

Clock

Clock is the main class used to work with DateTime values. It defines the following static properties/methods:

  • Now: Gets current time according to current provider.(根据当前提供程序获取当前时间)
  • Kind: Gets DateTimeKind of current provider.(根据当前提供程序获取当前时间类型)
  • SupportsMultipleTimezone: Gets a value indicates that current provider can be used for applications need to multiple timezones.(获取一个值,表明当前提供程序可以使用的应用程序需要多个时区)
  • Normalize: Normalizes/converts given DateTime upon current provider(转换给定的时间为当前提供程序的时间).

So, instead of using DateTime.Now, we are using Clock.Now, which abstracts it:

DateTime now = Clock.Now;

Clock uses clock providers inside it. There are three types of built-in clock providers:(有三种类型的内置时钟提供程序)

  • ClockProviders.Unspecified (UnspecifiedClockProvider):(未指定) This is the default clock provider and behaives just like DateTime.Now. It acts as you don't use Clock class at all.
  • ClockProviders.Utc (UtcClockProvider): Works in UTC datetime. DateTime.UtcNow for Clock.Now. Normalize method converts a given datetime to utc datetime and set it's kind to DateTimeKind.UTC. It supports multiple timezones.
  • ClockProviders.Local (LocalClockProvider): Works in Local computer's time. Normalize method converts a given datetime to local datetime and set it's kind to DateTimeKind.Local.

You can set Clock.Provider in order to use a different clock provider:

Clock.Provider = ClockProviders.Utc;

This is generally done at the beginning of an application (proper to do it Application_Start in a web application).

Client Side

Clock can be used on the client side by abp.clock object in javascript. When you set Clock.Provider on the server side, ABP automatically sets value of abp.clock.provider on the client side.

Time Zones

ABP defines a setting named Abp.Timing.TimeZone (TimingSettingNames.TimeZone constant) for storing selected timezone of host, tenant and user. ABP assumes that value of timezone setting is a valid Windows timezone name. It also defines a timezone mapping file to convert a Windows Timezone to IANA timezone since some of the common libraries are using IANA timezone id. UtcClockProvider must be used in order to support multiple timezones. Because if UtcClockProvider is used, all datetime values will be stored in UTC and all datetimes will be sent to clients in UTC format. Then on the client side we can convert UTC datetime to user's timezone by using user's current timezone setting.

ABP定义设置命名为Abp.Timing.TimeZone(timingsettingnames.timezone常数)储存宿主选择时区,租户和用户。ABP假定时区设置值是否是有效的Windows时区名称。它还定义了一个时区映射文件转换为Windows时区时区以来对IANA的一些常见的图书馆使用IANA时区ID。utcclockprovider必须为了支持多时区。因为如果utcclockprovider使用,所有日期时间值将被存储在UTC和所有日期将被送往UTC格式的客户。然后在客户端我们可以将UTCDateTime用户的时区使用用户的当前时区设置。

Client Side

ABP creates an javascript object named abp.timing.timeZoneInfo which contains timezone information for current user. This information contains Windows and IANA timezone ids and some extra information for windows timezone info. This information can be used to make client side datetime convertions and showing a datetime to user in his/her timezone.

Binders and Converters(粘合剂和转换器)

  • ABP automatically normalizes DateTimes received from clients in MVC, Web API and ASP.NET Core applications, based on the current clock provider.
  • ABP automatically normalized DateTimes received from database based on the current clock provider, when EntityFramework or NHibernate modules used.

If UTC clock provider is used, then all DateTimes stored in database assumed as UTC values, and all DateTimes received from clients assumed as UTC unless it's explicitly specified.

ABP框架系列之五十一:(Timing-定时)的更多相关文章

  1. ABP框架系列之十一:(AspNet-Core-ASPNET核心)

    Introduction This document describes ASP.NET Core integration for ASP.NET Boilerplate framework. ASP ...

  2. ABP框架系列之五十四:(XSRF-CSRF-Protection-跨站请求伪造保护)

    Introduction "Cross-Site Request Forgery (CSRF) is a type of attack that occurs when a maliciou ...

  3. ABP框架系列之五:(Unit Of Work-工作单元)

    Introduction Connection and transaction management is one of the most important concepts in an appli ...

  4. ABP框架系列之五十二:(Validating-Data-Transfer-Objects-验证数据传输对象)

    Introduction to validation Inputs of an application should be validated first. This input can be sen ...

  5. ABP框架系列之五十三:(Web-API-Controllers-Web-API-控制器)

    Introduction ASP.NET Boilerplate is integrated to ASP.NET Web API Controllers via Abp.Web.Api nuget ...

  6. ABP框架系列之三十一:(Localization-本地化)

    Introduction Any application has at least one language for user interface. Many applications have mo ...

  7. ABP框架系列之四十一:(Nuget-Packages-Nuget包)

    Packages ASP.NET Boilerplate is distributed on nuget. Here, a list of all official packages. Abp Cor ...

  8. ABP框架系列之五十:(Swagger-UI-集成)

    Introduction From it's web site: "....with a Swagger-enabled API, you get interactive documenta ...

  9. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

随机推荐

  1. CentOS安装mysql源码包

    1.# cd /usr/local/src 2.上传mysql.tar.gz文件 3.# tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 4.# ...

  2. mongo官方企业版安装及数据库授权使用

    通过安装.deb包的方式,系统是Ubuntu 16.04 1. Import the public key used by the package management system.(导入包管理系统 ...

  3. H5兼容ie做法

    IE浏览器支持新的标签:可以在使用新标签之前用javascript创建一个虚假的标签,这样就可以识别了.如<article>标签,在使用前,创建一个虚假的<article>标签 ...

  4. CentOS7 YUM安装与配置 MySQL5.7

    原文链接:http://blog.csdn.net/xyang81/article/details/51759200 安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL ...

  5. maven的依赖管理详细

    依赖管理 Jar包的管理 需求:整合struts2   页面上传一个客户id 跳转页面 1 添加依赖: 打开maven仓库的视图: 2 重建索引 1. 创建maven项目(同上) 2. 跳过骨架(同上 ...

  6. mac无密登陆到linux

    最近弄了台linux云服务器,然而每次登陆linux都好麻烦,所以倒腾了下ssh无密登陆. linux:centos 6.5,自带ssh mac:yosemite,自带ssh 步骤: 1. 创建key ...

  7. Linux命令:unlias

    语法 unalias [-a] name [name ...] 说明 取消别名. 可以一次取消多个别名,写几个取消几个.不写,取消所有别名. 参数 -a 取消所有别名,不论后面是否跟一个还是多个nam ...

  8. 2D射影空间,为何引入射影空间

    2D欧氏空间R2中,点的表示是A(x1,y1), B(x2,y2),二维参数,线的表示是L: y=kx+b,是二维参数: 如何表示点在线上面?可以扩展为(k,-1,b)* (x1,y1,1)t = 0 ...

  9. springboot+mybatis+freemark+oauth开发环境搭建

    一.创建springboot工程 1.环境介绍: a:jdk版本:1.7 b:Springboot版本:1.5.6(使用1.5.9的版本整合mybatis会报错:java.lang.NoClassDe ...

  10. Object.assign()怎么用?

    用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). 1.以对象为参数的合并1)Object.assign方法的第一个参数是目标对象,后面的参数都是源对象 con ...