阅读884 返回首页    go 阿里云 go 技术社区[云栖]


Java基础入门(一):Java里面的时间

这是一篇非常基础的Java技术文章,简单的说就是一个知识点,是自己在写业务代码时的一点总结,大神请绕行。

在 java 里面 表示 时间 ,一种是 java.util.Date 类,一种是 long 型的Unix时间戳,还有一种是String的字符串,当然前两种时间表示方法是时间定义的,可以对其进行操作计算得到一定的时间含义的,String字符串大多是前端显示之用,那当这三种形式共存时,必不可少就需要类型之间的转换及其对时间上的计算操作,这是在做一些业务功能上经常会用到的,现在总结一下通常所用的方法,以来简化后面再用到此类时能节省一定的时间而不需每次都要找度娘。

小典故:Unix时间戳,表示 格林威治时间1970年01月01日00时00分00秒起至现在的总秒数,如果系统为32位系统,则会因为位数不够的情况下,在格林威治时间2038年01月19日03时14分07秒发生溢出,导致系统瘫痪,但目前看来应该 大部分 系统都是 64位的吧,算了算貌似有生之年可以到那一天,不晓得会发生什么事情不。:-D


类型转换

大多是 String 与 Date 之间的转换 ,有一套yyyy-MM-dd HH:mm:ss的表示想必大家应该都知道
在这里和大家推荐一下Apache的 DateUtils , 这个方法 归纳了一些日期上的操作,让你用一句两句话便搞定时间上的操作,真乃神器也,有空看一下它的源码,你就会知道其实还是那么几个类,通常比较好的业务代码,会自己 再封装一个DateUtil ,去归纳总结一下在本业务中需要用到的一些常用的日期操作和符合本系统的日期表达方式。

String 转Date

String[]patters=newString[]{"yyyy-MM-ddHH:mm:ss"};
Date date = DateUtils.parseDate(time,patters)

Date 转String

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = format.format(date);

时间戳转Date

long timeStamp = 12345678L;
Date time = new Date(timeStamp);

时间戳要说一句,一般从Date 里面的 getTime()方法获得的是ms级别的10位数字,而业务代码里面一般要用到s级的,因此不要忘记除以1000之后再使用。再推荐一个日期和时间戳转换的网站,供业务功能调试及测试使用,当然你也可以自己写一个~

Date转Calendar

Date date = new Date();
Calendar c = DateUtils.toCalendar(date); // 注意try catch Exception

时间操作

Apache 的 DateUtils 提示已经提供了大部分对 日期 增减的 方法,看里面的方法就会知道:

dateUtils.png

但如果你对时间有特别的需求,比如说需要取某个时间的 小时 数,这个时候 就需要用到 Calendar ,因此一般的操作是 将Date 转换成Calendar ,再利用Caleadar对时间进行相应的操作,贴了一下相关代码,给个参考

Date date = new Date();
Calendar payTimeCal = DateUtils.toCalendar(date);
int payHour = payTimeCal.get(Calendar.HOUR_OF_DAY);  // 取 小时

Calendar startTimeCal = DateUtils.toCalendar(date);
startTime.set(payTimeCal.get(Calendar.YEAR),payTimeCal.get(Calendar.MONTH),payTimeCal.get(Calendar.DATE));  // 给startTime 设置和 PayTimeCal 一样的 年月日    

更多Calendar类的用法等你挖掘,一般看看相应源码就能满足 你当时业务时间功能上的需求。
这又印证了一句古话,See the source code, see the world (嗯,是我说的)。

最后更新:2017-04-19 11:30:40

  上一篇:go Pure PostgreSQL实现推荐系统
  下一篇:go RDS SQL Server死锁(Deadlock)系列之一使用DBCC捕获死锁