电脑@如何处理计算机中的日期和时间问题?( 四 )
Calendar 的基本使用:
本文插图
Calendar 修复了 Date 获取年份时必须 + 1900 的问题 , 但月份仍然使用 0~11 表示 1~12 月 , 星期采用 1~7 表示周日~周六 。 虽然咱们程序员都从 0 开始计数 , 但日期和时间一般都是要展示给用户看的 , 每次显示时都要转换实在是太不方便了 , 这也是需要新 API 的原因之一 。
Calendar 提供的日期和时间的加减功能使用如下:
本文插图
使用日期加减时有一点需要特别注意 , 我们来看一个例子:
本文插图
我们将 12 月 31 日减去 1 个月 , 再加上 1 个月 , 日期变成了 12 月 30 日!这是因为 11 月 没有 31 日 , 所以 12 月 31 日减去 1 个月时 ,Calendar 会自动将日期调整到 11 月 30 日 , 再加 1 个月 , 就变成了 12 月 30 日 。 也就是说 Calendar 加减时 , 会根据月份自动调整日期 。
上文介绍 Date 时我们说到 , 单靠 Date 和 SimpleDateFormat 只能把本地时区的时间用其他时区显示出来 , 无法自由的实现时区的转换 , 比如我们身在中国 , 无法把纽约时间 GMT-5 转换为东京时间 GMT+9 。 但 Calendar 是可以设置时区的 , 所以我们现在有了一种间接转换任意时区的方法:
本文插图
【电脑@如何处理计算机中的日期和时间问题?】
实际转换过程为:Calendar 保存的 纽约时间先转换成 Date 保存的 北京时间 , 再用 SimpleDateFormat 将 Date 转换成 东京时间展示出来 。
上例中还可以看到 , Calendar 使用 set 方法设置指定时间 , 除了此例中的一次性全部指定的方式外 , 也可以单个指定:
本文插图
四、新 API 由于旧 API 存在的诸多不便 , 从 Java 8 开始 , jaca.time 包提供了一套新的日期和时间的 API 。 主要有 LocalDateTime、ZonedDateTime、Instant、ZoneId、Duration、DateTimeFormatter 。
新 API 不仅使用更方便 , 而且修正了 旧 API 中不合理的常量设计:
- 新 API 中 , Month 取值范围变成:1~12 , 表示 1~12月
- 新 API 中 , Week 取值范围变成:1~7 , 表示周一~周日
本文插图
LocalDateTime 使用 now() 函数获取当前日期和时间 , 输出时严格按照 ISO 8601 格式打印 。 ISO 8601 是国际标准化组织的日期和时间的表示方法 , 全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》 , ISO 8601 规定使用 T 分隔日期和时间 。 标准格式如下:
- 日期:yyyy-MM-dd
- 时间:HH:mm:ss
- 带毫秒的时间:HH:mm:ss.SSS
- 日期和时间:yyyy-MM-dd'T'HH:mm:ss
- 带毫秒的日期和时间:yyyy-MM-dd'T'HH:mm:ss.SSS
本文插图
推荐阅读
- 人民网@【战“疫”说理】疫情防控中如何有效实现经济复苏?
- 太平洋电脑网:不止于高功率+金牌,爱国者ES650还能保5年,爱了爱了
- [笔记本电脑]乙辰科技正式发布首款WiFi6新品:北斗II号分布式无线路由器
- 2020@2020 iPhone SE终于来了?A13处理器+三种配色
- 高通865处理器PK麒麟990处理器 集成5G才是王道
- 找果网■就是牛!10.2英寸IPAD在第四季度撑起全球平板电脑市场
- 『车家号』高低功率如何选?后期改装就能“低变高”了吗?,同一款发动机
- #浦江头条#“大龄书僮”们还好吗?,网课一月间孩子手机平板电脑敞开用
- 手机、眼镜如何消毒?清洁要从细节做起
- 『音频』iOS如何导入百度云的音频(易剪和易剪多轨版)
