程序中的时间处理和 Java Calendar

当你的业务逻辑涉及多时区的时候,时间的处理就会变得比较麻烦。平时我们算时差就有一些障碍,更不用说在讲究精确的计算机世界了。有些地方的时差会变,比如美国有夏令时 (Day Time Saving Off) 和冬令时 (Day Time Saving On),夏令时的时候美国东部和中国是 12 个小时时差,冬令时的时候就变成了 13 个小时。面对这些不确定性,找到一个不变的基准就非常重要,计算机世界...
摘要由CSDN通过智能技术生成

当你的业务逻辑涉及多时区的时候,时间的处理就会变得比较麻烦。平时我们算时差就有一些障碍,更不用说在讲究精确的计算机世界了。有些地方的时差会变,比如美国有夏令时 (Day Time Saving Off) 和冬令时 (Day Time Saving On),夏令时的时候美国东部和中国是 12 个小时时差,冬令时的时候就变成了 13 个小时。

面对这些不确定性,找到一个不变的基准就非常重要,计算机世界中时间的基准就是格林尼治标准时间 GMT +00. 我们都知道中国在“东 8 区”,所以中国是时区就表示为 GMT +08. 绝大多数编程语言都支持时间戳 (Timestamp) 处理,这个长整型数字是按照格林尼治标准时间计算,从 1970 年 1 月 1 日零点零分零秒零毫秒开始数,到当前经过的时间。注意,时间戳是以格林尼治标准时间为基准的,我们不讨论按照任何其他时区计算的时间戳。

计算机在显示当前时间的时候,是在时间戳的基础上经过了本地化处理的。接入互联网的计算机通过 NTP 协议(网络时间协议)互相对准时间,保证各方都有一样的时间戳。操作系统要在桌面显示当前时间的话,是参考了用户设定的时间/区域,转化而来的。

Java 中的一些操作技巧

获取当前日期、月份等数据

Java 的 java.util.Date 类把 getDate(), getHour() 这类方法给反对掉了 (deprecated), 更推荐使用 Calendar 类来实现这些操作。比如我们已经有了一个 java.util.Date 类的对象,用 date 变量来指向它,那么获得当前本地日期的方法如下。

Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

时区设置

和获取日期、月份一样,设置时区在 Java 中也要通过 Calendar 类来进行。在调用 setTimeZone(TimeZone) 方法以后,时间戳不改变,而本地化的年、月、日、小时、分钟会变。

下面的代码可以把时区设置成格林尼治标准时间。

Calender cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));

表示东 8 区就是 GMT+8.

从字符串时间转换成 Date 对象

这种操作需要利用 SimpleDateFormat 类来进行语义分析 (parsing).

String dateInString = "2019-11-11 +0000";  
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd Z");  
Date date = sdf.parse(dateInString);  
System.out.println(date);

更多时间格式可以参考 官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值