万水千山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.简介 如果你所开发的需要走向世界的话,那么肯定需要针对每一个用户进行不同的本地化处理,有可能你的客户在日本,需要使用日语作为显示文本,也有可能你的客户在美国,需要使用英语作为显示文本.如果你还是一 ...
随机推荐
- android插件化之路
概论 插件式开发通俗的讲就是把一个很大的app分成n多个比较小的app,其中有一个app是主app.基本上可以理解为让一个apk不安装也可以被运行.只不过这个运行是有很多限制的运行,所以才叫插件. ...
- 2、MyEclipse和Eclipse调优,MyEclipse配置(tomcat和jdk的内存设置),jar引入相关知识点,将Java项目编程web项目的办法
1.WindowàPreferenceàGeneralàWorkspaceàText file encoding都改成UTF-8 2.WindowàPreferenceàGeneralàEdito ...
- C++编译器对属性和方法的处理机制
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段和代码段构成. C++编译器如何完成面向对象理论到计算机程序 ...
- UNIX环境高级编程——线程限制
- Android必知必会-Handler可能引起的内存泄露
在Android开发中,编写多线程通常会使用到Thread和Handler,细心的朋友会发现,很常见的写法会被编辑器提示有问题,new Handler(){} 内的代码背景颜色会变成黄色.Androi ...
- 新手推荐:Hadoop安装教程_单机/伪分布式配置_Hadoop-2.7.1/Ubuntu14.04
下述教程本人在最新版的-jre openjdk-7-jdk OpenJDK 默认的安装位置为: /usr/lib/jvm/java-7-openjdk-amd64 (32位系统则是 /usr/lib/ ...
- STL:set/multiset用法详解
集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...
- VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
- (NO.00002)iOS游戏精灵战争雏形(十二)
首先要声明的是,前几篇实现的shoot方法不是一定会命中目标,这取决于目标运行的速度,子弹的速度,子弹发射的时机以及弹道路径中是否有障碍物等等. 这也是符合实际情况的.如果你的要求是一旦发出子弹必定击 ...
- Android反编译获取源码-android学习之旅(70)
上一讲我们介绍了如何获取资源文件,这一节讲解如何获取源码,其实获取源码真的很简单 首先还是要有工具,Dex2jar,这个工具用于将apk解压之后的dex文件转化为jar文件还有jd-gui的这个工具能 ...