Grails中的时间字段的处理

1.Grails中的时间机制:

1、首先,要知道的是,在页面中选定的时间传到服务器时,因为通过网路只能传递字符串数据,所以并不能传过来整形、日期这种Java数据类型。

这就导致了需要进行如下处理:

trainClassInstance.meetingDt = params.date('meetingDt','yyyy-MM-dd')

trainClassInstance.clearErrors()

trainClassInstance.validate()

代码理解:通过params.date('meetingDt','yyyy-MM-dd') 可以通过params取到字符串型的日期数据,然后调用date方法就可以将字符串转为java date数据类型,其中'yyyy-MM-dd'是传过来的数据格式

实现同样的效果也可以这样写:

Date.parse('yyyy-MM-dd',params.meetingDt)

而下面的clearErrors() 和validate() 方法的作用是针对Grails中返回的日期字段中因为没有日期数据而是null的错误(意思是:直接返回的meetingInstance.meetingDt的值其实是null),在我们进行手动赋值后清除这个错误的,否则下面的代码还会报错:


2、结合java中的date机制,可以理解,使用Grails标签获取到日期是格林威治时间样式:2016-03-12 13:57:37 CST ,所以显示的时候需要格式化一下,才能以字符串的形式显示想要的日期格式。

这里定制时间格式可以使用下面的后端改为相应格式的String对象让前端展示。也可以使用g:formatDate 标签来在前端改变时间样式:

<g:formatDate format="yyyy/MM/dddate="${trainClassInstance?.endDate}"/>


2.处理时间格式转化的代码:

1、首先,要理解java中的date类机制:

1)Date是没有格式的。

Date是一个包装了毫秒值的瘦包装器,表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。

至于为何选择这个时间作为标准呢,历史事件为:

1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX,新版于1971年发布。

那时的计算机操作系统是32位,时间用32位有符号数表示,则可表示 68 年,

用32位无符号数表示,可表示136年。他们认为 以 1970年 为时间 原点 足够可以了。 因此,C 的 time 函数 就这么 定了,后来的 java 等也用它,微机也用它,工作站本来就是unix系统当然也用它。(今后若用64位机年限更没问题。)

1970年1月1日 算 UNIX 和 C语言 生日。

由于主流计算机和操作系统都用它,其他仪器,手机等也就用它了。

2)那么我们通常说的日期格式是怎么回事呢?

我们说的日期格式,是将Date,即是毫秒数按照一定的格式展示给我们,展示出来的值是【String字符串】而不是【Date日期】

所以,你可以将Date转化为任意你要的格式

举例说明下:

所以,也就可以理解上面保存的date数据取出来都是格林威治时间样式,而不是我们看到的各种样式。


2、基于以上的理解,也就可以理解时间处理中最常用的两个工具:simpleDateFormat  和 getTime() 、setTime()

1)simpleDateFormat  : 该工具类用于处理时间,常用两个方法举例如下

首先,实例化工具对象    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

1. formatter.parse(str)    用于将字符串进行解析,返回日期格式,其中str必须是"yyyy-MM-dd"的样式

2. formatter.format(date)    用于对某个date对象进行格式定制,返回字符串对象,且格式为  "yyyy-MM-dd"


2)getTime() 、setTime() 方法解析

1. getTime方法解读

getTime方法用于获得自1970年1月1日00:00:00 GMT开始到现在所表示的毫秒数。

语法  public long getTime()

返回值:返回自1970年1月1日 00:00:00 GMT开始到现在所表示的毫秒数。

示例  本示例使用Date类的getTime方法,获得自1970年1月1日 00:00:00 GMT开始到现在所表示的毫秒数。

public static void main(String[] args) {

Date date = new Date();//创建现在的日期

long value = date.getTime();//获得毫秒数

System.out.println("日期:"+date);

System.out.println("到现在所经历的毫秒数为: "+value);

}

运行本示例,将在控制台输出日期及自1970年1月1日00:00:00 GMT开始所表示的该日期的毫秒数。

由于Date类所创建对象的时间是变化的,所以每次运行程序在控制台所输出的结果都是不一样的。

2. setTime方法解读

setTime方法用于设置当前Date对象所表示的日期/时间值,该值是表示1970年1月1日 00:00:00 GMT以后time毫秒的时间点。

语法  public void setTime(long time)

参数:time是设置的毫秒数。

示例  本示例使用Date类的setTime方法,设置当前Date对象自1970年1月1日 00:00:00 GMT开始到现在所表示的毫秒的时间点,并在控制台输出这个时间点。

public static void main(String[] args) {

Date date = new Date();       //创建日期对象

System.out.println("创建的日期对象为:\n  " + date);

date.setTime(302676633308L);     //设置毫秒值

System.out.println("输出指定时间点"302676633308"表示的Date对象:\n  " + date);

}

运行本示例,将在控制台输出当前日期及设置自1970年1月1日 00:00:00 GMT开始所表示毫秒数的时间点。

注意:在使用Date类的setTime方法设置毫秒数时,如果设置的值超出了int型数据的范围,则必须在该数值后加一个小写的l或大写的L来表示是一个长整数;否则程序会出错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容