Java 时间小总结

每次写关于Java time的时候总是要抓狂,所以特此写这篇博文记录自己的心酸历程。


写了很多关于Java时间的小需求,发现有一种方法最为无脑,那就是通过毫秒数为中介进行转换,下面的栗子都将体现这一方法特性:


转换成毫秒数

获取系统当前时间的毫秒数

这个没什么好说的,就是:

System.currentTimeMillis()


当然,也可以复杂点,这就要用到我下面要说的东西:



一般没特意导入包的时候,new Date()的类型提示第一个就是java.util.Date,一般都会导入第一个吧。



将java.util.Date和java.sql.Date转化为毫秒数

使用getTime()函数。



将任意一个日期转化为毫秒数

这一个我是参考了https://blog.csdn.net/seven25/article/details/52420209


至于为什么加那个try...catch,不加会报错,试一下就知道了。


将毫秒数转换为Date

将毫秒数转化为java.util.Date

直接使用构造方法:






将毫秒数转化为java.sql.Date

同样是使用构造方法:




这里和上面那个还不一样。


将毫秒数转化为想要的时间格式

这里就要涉及到SimpleDateFormat这个类了。

为了方便起见,以下的Date全部都是java.util.Date,毕竟java.sql.Date用的不是很多。



至于这个SimpleDateFormat怎么用,大家可以查查API或者参考这篇博文。总之,这个玩意能规定你想要的输出格式。


刚刚尝试了一下,发现可以省略掉new Date()的过程。



如果涉及到把时间存入数据库的需求时,我一般是这么做的:

(1)把时间类型设置为long或者String

(2)每次都获取到毫秒数(long型),转化一下(对String而言)存入数据库

(3)读出时,转化一下(对String而言),然后使用SimpleDateFormat.format()输出为想要的格式


如果是数据库里保存的时间是Date的话,读出来的时间可以用java.sql.Date接收,不知道java.util.Date能不能,个人认为应该是可以的,毕竟java.sql.Date是java.util.Date的子类。


如果又涉及到在当前时间上加上减去几天的话。可以这样:

一天是:24*60*60*1000毫秒

然后将要操作的时间的毫秒数加上或减去n个一天就行,得到的仍是一个long型毫秒数。

要注意的是小心long型溢出的问题,你用30*24*60*60*1000是会溢出的。怎么解决呢,分成两次做20*24*60*60*1000 + 10*24*60*60*1000


当然,这只是个人愚见,没有考虑时间效率什么的,只是个人图个简单。如果大家有什么高招的话,请多多指教。


还有一点要说明的是,这个毫秒数是距离1970年1月1日, 00:00:00的毫秒数,也就是UTC时间(我看有人这么说),下图是我的考证,oracle的API下有个叫UTC的函数,这个函数的返回值就是一个毫秒数;我们都知道外国人给函数取名不是那么随便的,这样取名可能也说明UTC时间是有这么个含义。



那么这个UTC时间和Unix时间戳(不知道的自己搜)有啥区别呢?

区别就是一个是毫秒为单位一个是秒为单位。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值