1.Calender
@H_301_0@日历类,主要描述时间单位,例如年月日,时分秒,星期几,一年的第几周,注意这个是个抽象类,可能大多数开发人员没有太在意,下面将用代码详细描述。2. Date
@H_301_0@日期类,主要描述时间变化,目前通行的方案是相当于unix 1970年1月1号 0时0分0秒时间的偏移豪秒数,作为时间推进的,定义时间的参考点,换句话来说,我们现在的日期都是计算机系统里面描述的时间,都是以这个为基准点,往后推进多少毫秒数,时间就往后推进多长时间,计算的标准方程式也很简单.time/1000 相当于 过了多少秒; time/(60*1000) 相当于过了多少分钟,依次类推。
3. TimeZone
@H_301_0@时区类,用于描述时间所处的时区,同一个时间,在世界不同时区,时间值不同;所以我们说时间,通常要带上具体是哪个地区时间,当然如果生活在一个地方,大家习以为常的省略了时区, 比如China 时区信息就是GMT+8 , 国际通行的格式是GMT+08:00 ,这个很重要,有些地方描述格式不一致,导致在很多地方,比如有些地方GMT+5 跨越半个时区,这样假如你用GMT+5.5来标示,国际上可是不认可的,正确的表达格式是GMT+5:30. @H_301_0@另外对于时区信息,不同城市有着自己特有的描述,方便在不同城市中活动的时候来准确描述时间信息,单纯地说GMT+0x:00或者GMT-0x:00,不是那么形象,比如洛杉矶时间、纽约时间、中国香港时间,巴黎时间,伦敦时间等,这些时间表达式在不考虑冬令时夏令时的情况下,基本和GMT时间存在一一对应关系。America/Los_Angeles 洛杉矶时间 GMT-05:00 China/chongqing 重庆时间 GMT+08:00 China/shanghai 上海时间 GMT+08:00 Pacific/Auckland 奥克兰时间 GMT+12:00
4. SimpleDateFormat
@H_301_0@日期格式化类,用于描述时间的格式,对于不同国家阅读习惯,时间格式不尽相同,最大的不同体现在年月日的格式上 ,yyyy/MM/dd 标示“年月日” 或者 dd/MM/yyyy 标示“日月年”, 年月日,以及24小时制,java约定一套占位符,按照格式来输出对应的。Calendar defaultDalendar = Calendar.getInstance(); // 通过操作系统配置的时区信息来初始化日期 Calendar calendarByTimeZone = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); //通过时区来初始化日历 Calendar calendarByZoneId = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));//通过时区ID初始化日期@H_301_0@###golang版 golang 处理日期就比较简单,没有那么类配置,这就是面向对象和函数不同表达 ,api简洁,不多说,看代码就懂,不同的是 对于时间表达式,有些怪怪的。 @H_301_0@####时间格式化 @H_301_0@“2006-01-02 15:04:05是golang的对于时间的Format的Layout”,。请看下表:
01/Jan | 02 | 03/15 | 04 | 05 | 06 | -07[00][:00] | PM | Mon |
---|---|---|---|---|---|---|---|---|
月 | 日 | 时 | 分 | 秒 | 年 | 时差 | 上下午 | 星期几 |
- @H_301_0@就是123456 : 月日时分秒年
- @H_301_0@7 表示 时差
- @H_301_0@PM/AM 表示上下午
- @H_301_0@Mon 表示星期几
layout:="2006-01-02 15:04:05" now := time.Now() local1,err1 := time.LoadLocation("UTC") //等同于"UTC" if err1 != nil { fmt.Println(err1) } local2,err2 := time.LoadLocation("Local")//从默认ZONEINFO 加载时区配置 if err2 != nil { fmt.Println(err2) } local3,err3 := time.LoadLocation("America/Los_Angeles") if err3 != nil { fmt.Println(err3) } fmt.Println(now.In(local1).Format(layout)) fmt.Println(now.In(local2).Format(layout)) fmt.Println(now.In(local3).Format(layout))
在java中,按照时区来做日期转换的时候,比如GMT+08:00转GMT-05:00 时间可以直接用时间的偏移量(13个小时)来计算,不过还是强调一点,当出现夏令时,冬令时的时候,这一套计算方法的无效了,需要通过时区ID 来计算,比如"China/shanghai", "America/Los_Angeles" 来做转换,具体怎么转换这个api文档。 @H_301_0@在golang中, 按照时区来做时间转换的时候,比如GMT+08:00转GMT-05:00 直接就是行不通的,执行会报错,当让我不知道是不是我了解的还不够透彻,我的理解是golang本身就不认可这种方式来处理时间,更加,更倾向于通过时区ID 来计算,比如"China/shanghai","America/Los_Angeles" 来做转换。
代码如下:
//当前时间 2017-01-01 01:01:01 转成洛杉矶时间 local,_ := time.LoadLocation("America/Los_Angeles") targetTime,_:= time.Parse(layout,"2017-01-01 01:01:01") fmt.Println(targetTime.In(local).Format(layout))@H_301_0@知识,技术就讲到这里为止,再讲细节,这里面涉及到java 的时区信息包的更新工具,golang 更新时区报的,三篇绝对讲不完,所以尾篇,我将就时间的说说自己的感想,鸡汤也好,毒药也罢,总归算是一份感悟,倘若你是一个刚入职场的菜鸟,愿意看完这个系列完结篇,算是有始有终;假如你已经在职场打拼多年,在我要说的故事里,能看到你些许曾经的影子,也算是回忆曾经走过的日子。