万水千山ABP - 时区问题
关于时间和时区问题,后面的参考文章中有详细的描述。
我遇到的问题是:
在MVC视图页面中,显示记录的生成时间 CreationTime
<div>
@Model.CreationTime
</div>
我使用的是 UTC 时间,页面显示的结果也确实是正确的UTC时间,然而,但是,这不是我们所期望的本地时间。
万水千山之后,找到了 ABP 提供的帮助类 Abp.Timing.Timezone.TimezoneHelper。
直接贴时区转换代码:
@using Abp.Timing.Timezone;
<div>
@TimezoneHelper.ConvertFromUtc(Model.CreationTime, TimeZoneInfo.Local.Id)
</div>
TimeZoneInfo.Local.Id 返回表示本地时区的 TimeZoneInfo 对象的Id。System.TimeZoneInfo 类是 .net 类,和 abp 无关。
TimezoneHelper.ConvertFromUtc 方法将UTC时间转为指定时区Id的当地时间。
到这里,你或许发现,好傻,把简单问题搞复杂了。一点不错,还不就是个时区转换问题吗,关 ABP P 事。难怪ABP的文档都不提怎么在页面中直接显示本地时间。
好吧,其实,看 ABP 的源码,TimezoneHelper.ConvertFromUtc 方法就一句代码:
public static DateTime? ConvertFromUtc(DateTime? date, string toTimeZoneId)
{
return Convert(date, "UTC", toTimeZoneId);
}
简单一点,我的代码就该是
<div>
@Convert(Model.CreationTime, "UTC", TimeZoneInfo.Local.Id)
</div>
简单是简单了,却多了一个 "UTC",而且,而且,无关ABP了 ......
另外,在 JS 脚本中,可使用 moment.js 实现,如显示 ABP 使用的实例代码
moment(data.record.creationTime).format('YYYY-MM-DD HH:mm:ss')
再好好学习之后,我们发现,ABP是支持多时区的。查看 Abp\Timing\Timezone\TimeZoneConverter.cs 源码文件,发现它提供了几个时间转换函数.
下面列出它实现的接口的定义:
namespace Abp.Timing.Timezone
{
//
// 摘要:
// Interface for timezone converter
public interface ITimeZoneConverter
{
//
// 摘要:
// Converts given date to application's time zone. If timezone setting is not specified,
// returns given date.
//
// 参数:
// date:
// Base date to convert
DateTime? Convert(DateTime? date);
//
// 摘要:
// Converts given date to tenant's time zone. If timezone setting is not specified,
// returns given date.
//
// 参数:
// date:
// Base date to convert
//
// tenantId:
// TenantId to convert date for
DateTime? Convert(DateTime? date, int tenantId);
//
// 摘要:
// Converts given date to user's time zone. If timezone setting is not specified,
// returns given date.
//
// 参数:
// date:
// Base date to convert
//
// tenantId:
// TenantId of user
//
// userId:
// UserId to convert date for
DateTime? Convert(DateTime? date, int? tenantId, long userId);
}
}
特此补充,以免误导。后面有时间再补充......
参考:
ABP理论之时间
万水千山ABP - 时区问题的更多相关文章
- 万水千山ABP - 弹出对话框禁用回车
模态对话框中禁用回车 ABP Zero 中,使用弹出对话框进行实体编辑,回车时会自动保存并关闭对话框.那么如何禁用这个回车功能 ? 查看实体列表视图 index.cshtml 所对应加载的脚本文件 i ...
- 万水千山ABP - 单租户时,成功保存数据后,数据不显示
问题描述: ABP 禁用了多租户,在编辑一个实体记录后,能成功地保存数据,但数据列表中看不到这条记录.打开数据表查看,发现该实体记录的 TenantId 字段值成了 Null , 而不是预期的默认租户 ...
- 万水千山ABP - 系统发布后迁移 CodeFirst 数据库[原创]
在项目开发的过程中,常会遇到项目发布后还变更数据库的情况.这时如何方便地进行数据库迁移呢 ? 下面直接列出操作的步骤: 1. 发布修改后的应用: 将最新版本的应用更新到目标机器中.更新的文件当然不包括 ...
- ABP理论之时间
返回总目录 本篇目录 介绍 Clock 时区 绑定器和转换器 介绍 虽然有些应用针对的是一个特定的时区,但是也有一些应用针对多个不同的时区.为了满足这些需求,ABP为datetime操作提供了通用的基 ...
- ABP框架 - 时间
文档目录 本节内容: 简介 时钟 客户端 时区 客户端 绑定器与转换器 简介 虽然有些应用目标市场只是在一个时区,有些应用目标市场是许多不同时区,为满足这种需求并集中化日期操作,ABP为日期操作提供公 ...
- ABP理论学习之发布说明
返回总目录 查看更详细信息以及下载源代码请查看原文档 ABP v0.9.2.0 | [更新日期:2016/6/6 11:21:28 ] 解决方案转换成xproj/project.json格式. 添加了 ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十七节--Quartz与ABP框架Abp.Quartz及扩展
ABP+AdminLTE+Bootstrap Table权限管理系统一期 Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate- ...
- ABP官方文档翻译 2.6 定时
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...
- [Abp 源码分析]十三、多语言(本地化)处理
0.简介 如果你所开发的需要走向世界的话,那么肯定需要针对每一个用户进行不同的本地化处理,有可能你的客户在日本,需要使用日语作为显示文本,也有可能你的客户在美国,需要使用英语作为显示文本.如果你还是一 ...
随机推荐
- java基础---Java---面试题---银行业务调度系统(线程同步锁、枚举、线程池)
银行业务调度系统的项目需求: 模拟实现银行业务调度系统逻辑,具体需求如下: Ø 银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. Ø 有三种对应类 ...
- 一个简单的安卓+Servlet图片上传例子
例子比较 简单,服务端为Java Web Servlet,doPost方法中接收图片并保存,然后将保存的图片名返回给客户端,关键代码: @SuppressWarnings("deprecat ...
- Java数据类型及类型转换
http://blog.csdn.net/pipisorry/article/details/51290064 java浮点数保留n位小数 import java.text.DecimalFormat ...
- Collections类解析
最常用的排序: 需要实现Comparable接口 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它 ...
- UE4类修饰符
官方文档链接: https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Reference/index.html ...
- UE4帧动画Matineed
发一句牢骚,ue4除了渲染好一点,其他操作都没有unity便利,最近需要在项目中,调几个简单的动画使用到了Matineed,相当不好用.也可能是unity转ue4,有先入为主的观念,哈哈,never ...
- SQL 2012 Always On 为 MSCRMSqlClrLogin SQL 登录名创建非对称密钥时报语法错误
根据实施手册中的下图的SQL在为MSCRMSqlClrLogin 创建非对称秘钥时报语法错误,具体的错误在就path那,调了多次还是报错,索性就把SQL拆开执行. 先执行这条 SELECT * FRO ...
- iOS中 Swift初级入门学习(二)
// Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation /* // 控制语句 // for - in // 遍历字符 ...
- 百度地图API的学习
我们可以进入百度API的网站学习百度地图API:http://dev.baidu.com/wiki/map/index.php,看完这些你应该基本上会掌握了,还有一些显示地图中一些很神奇的效果,需要一 ...
- python类:类方法和静态方法
http://blog.csdn.net/pipisorry/article/details/49516185 面相对象程序设计中,类方法和静态方法是经常用到的两个术语.逻辑上讲:类方法是只能由类名调 ...