Java 8 新日期时间 API ( 下 ) – 时区日期时间
引言
上一章节 Java 8
新日期时间 API
( 上 ) – 本地日期时间 我们对 Java 8
重新设计的日期时间 API
做了一些基础的介绍,同时详细介绍了和本地时间有关的几个类 LocalDateTime 、LocalDate 和 LocalTime
。
我同时也发现,这三个类没有任何时区相关的信息,但也不能说它们没处理时区,而只能说它们有选择的隐藏了时区的处理。它们内部会使用操作系统当前的时区。
以此同时,Java
在 java.time
包中也提供了几个类用于处理需要关注时区的日期时间 API
。它们是 java.time.ZonedDateTime
和 java.time.ZoneId
。前者用于处理需要时区的日期时间,后者用于处理时区。
ZonedDateTime
和 LocalDateTime
类似,几乎有着相同的 API
。从某些方面说,ZonedLocalTime
如果不传递时区信息,那么它会默认使用操作系统的时区,这样,结果其实和 LocalDateTime
是类似的。
比如,我们可以使用 ZonedDateTime
的 now()
方法返回当前时区 ( 操作系统时区 ) 的日期时间,调用 parse()
方法可以将一个包含了时区信息的字符串格式的日期时间转化为一个 ZonedDateTime
实例。
简单使用ZonedDateTime示例
import org.junit.jupiter.api.Test;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZonedDateTime;public class ZonedDateTimeTest {/*** 简单测试ZonedDateTime*/@Testpublic void zonedDateTimeTest(){ZonedDateTime now = ZonedDateTime.now();System.out.println("当前日期时间是:" + now);//解析String到ZonedDateTimeZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00");System.out.println("日期时间是:" + datetime);//转换成为LocalDateLocalDate localDate = now.toLocalDate();System.out.println("当前日期是:" + localDate);//转换成为LocalTime localTime = now.toLocalTime();System.out.println("当前时间是:" + localTime);}
}/*
返回结果当前日期时间是:2021-11-10T18:34:53.395+08:00[Asia/Shanghai]日期时间是:2012-10-10T21:58+08:00当前日期是:2021-11-10当前时间是:18:34:53.395
*/
处理时区
时区相关的信息,我们可以使用
ZoneId
类来处理。比如可以调用ZoneId
类的静态方法systemDefault()
返回当前的时区。我们还可以调用
ZonedDateTime
实例的getZone()
方法获取实例所在的时区
import org.junit.jupiter.api.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;public class ZonedDateTimeTest {/*** 简单测试ZonedDateTime*/@Testpublic void zonedDateTimeTest() throws ParseException {/*** 获取时区的两种方法*/ZoneId currentZone = ZoneId.systemDefault();System.out.println("当前时区是: " + currentZone);ZonedDateTime now = ZonedDateTime.now();System.out.println("当前时区是: " + now.getZone());/*** 设置当前时区*/ZoneId id = ZoneId.of("Europe/Paris");System.out.println("ZoneId: " + id);currentZone = ZoneId.systemDefault();System.out.println("当期时区: " + currentZone);/*** 解析时间*/SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd");System.out.println(sdf.parse("2020--02--01"));DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd").parseDefaulting(ChronoField.NANO_OF_DAY, 0).toFormatter().withZone(ZoneId.of("Europe/Berlin"));ZonedDateTime parse = ZonedDateTime.parse("2015-11-13", formatter);System.out.println(parse);OffsetDateTime offsetDateTime = parse.toOffsetDateTime();System.out.println(offsetDateTime.format(DateTimeFormatter.ISO_DATE));}
}
Java 8 新日期时间 API ( 下 ) – 时区日期时间相关推荐
- Java当中的IO流-时间api(下)-上
Java当中的IO流(下)-上 日期和时间 日期类:java.util.Date 系统时间: long time = System.currentTimeMillis(); public class ...
- java中io流实现哪个接口_第55节:Java当中的IO流-时间api(下)-上
标题图 Java当中的IO流(下)-上日期和时间日期类:java.util.Date 系统时间:long time = System.currentTimeMillis();public class ...
- Oracle全球化 —— 时间类型、时区与时间函数
最近遇到一个表中数据时区不对的问题,排查思路一般是看表字段类型.看时区以及看插入时间的方法.Oracle官方文档<Database Globalization Support Guide> ...
- php utc时间_PHP跨时区(UTC时间)应用解决方案_php技巧
1.将程序内部时区设置为UTC时间.(UTC 也可以叫 GMT) PHP设置: date_default_timezone_set("UTC"); Yii设置: config/ma ...
- java 利用新浪天气API获取天气预报
新浪为我们提供了天气预报获取接口API http://php.weather.sina.com.cn/xml.php?city=武汉&password=DJOYnieT8234jlsK&am ...
- js将北京时间转换为当前时区的时间
function dateBJtoLocal(time) {// 当前时区与标准地区的差值(分钟)const offset = new Date().getTimezoneOffset();// 北京 ...
- 8 时间转指定时区的时间_Linux指定的时间运行自定义命令的两种方式
如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...
- linux shell 输出日期格式,Linux下Shell日期的格式
常用的时间域如下: % Y 年(例如:1970,2018等) % m 月(01..12) % d 一个月的第几天(01..31) % H 小时(00..23) % M 分(00..59) % S 秒( ...
- 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)
技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...
- 《Java 8 in Action》Chapter 12:新的日期和时间API
在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...
最新文章
- 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
- mysql 几十连接_MySQL挑战:10万连接数
- html线条绕圆旋转,js围绕圆旋转
- 网骗欺诈?网络裸奔?都是因为 HTTP?
- 跟ASP.NET MVC一起使用jQuery
- 检查是否禁止asp.net服务扩展_在 Kubernetes 环境下部署 OpenWhisk 服务
- Angular开发实践(五):深入解析变化监测
- 使用反射修改final属性
- oracle学习笔记之pI/sql视频小结
- pandas 数据结构与基础功能
- 高等数学张宇18讲 第十三讲 无穷级数
- 物联网开发笔记(29)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕显示动态图片GIF(ST7789芯片)
- 计算机网络技术表白,网络表白的经典句子
- 活体检测综述 Deep Learning for Face Anti-Spoofing: A Survey 阅读记录
- CXF之Features
- QGIS教程-1:软件安装
- 程序员能有什么好的出路?
- Windows注入与拦截(3) -- 使用钩子方式完成DLL注入
- 输入四个整数,输出其中最小的数
- 网新恒天2014校园招聘笔试编程题
热门文章
- Tclientdate的排序
- Leetcode669.Trim a Binary Search Tree修建二叉树
- 机器学习实战Ch02: k-近邻算法
- javascript面试题(一)
- 【LeetCode】217. Contains Duplicate (2 solutions)
- H3C BGP基本配置
- 计算机网络数据链路层之高速以太网(含使用以太网进行宽带接入)
- 游戏筑基开发之menset底层实现及C语言项目常见问题解决方案(C语言)
- puppet详解(四)——package资源详解
- LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化