带时区的日期和时间:ZoneDateTime
不同的国家处在不同的时区上,伦敦为中时区,中国采用东八区时间,意思是比标准时间早八个小时。
由于地球是圆形的,根据地球自转的方向,东八区会比中时区提前进入新的一天,看见太阳。
Java中的ZoneDateTime就可以获取同一天,不同时区的时间。
//获取所有时区,输出:[Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi,……
Set availableZoneIds = ZoneId.getAvailableZoneIds();
//获取当前计算机默认的时区,也就是东八区时间
ZoneId zoneId= ZoneId.systemDefault();//输出:Asia/Shanghai
美国伦敦时间,UTC
ZonedDateTime zoneDateTimeNow01 = ZonedDateTime.now(Clock.systemUTC());
ZoneId zoneId= ZoneId.systemDefault();//获取当前计算机默认的时区,也就是东八区时间
ZonedDateTime zoneDateTimeNow03 = ZonedDateTime.now(zoneId);
//LocalDateTime能够获取当前东八区的时间
LocalDateTime localDateTimeNow = LocalDateTime.now();
说明1:Z(zero)是表示0时区,对我们国家来说,采用北京时间,处于东八区 UTC+8。所以带Z的时间格式,转换成北京时间需要加上 8 个小时。
说明2:T:表示时间元素的开始。
public static void main(String[] args) {
//获取默认的时区,输出为:Asia/Shanghai
ZoneId zoneId= ZoneId.systemDefault();
//定时时间格式,T表示时间元素的开始,
String timePattern = "yyyy-MM-dd'T'HH:mm:ssZ";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(timePattern);
//定义一个字符串类型的时间
String time1="2023-06-06T00:18:14+0800";
//将时间类型的字符串转化成ZonedDateTime
ZonedDateTime zonedDateTime1 =
ZonedDateTime.parse(time1, dateTimeFormatter);
//获取东八区时间
ZonedDateTime ZonedDateTime2 =
zonedDateTime.withZoneSameInstant(zoneId);
//输出:2023-06-06T00:18:14+08:00[Asia/Shanghai]
System.out.println(ZonedDateTime2);
}
【代码】
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.now();
//转LocalDate
LocalDate localDate= zonedDateTime.toLocalDate();
System.out.println("localDate=>"+localDate);
//LocalTime
LocalTime localTime= zonedDateTime.toLocalTime();
System.out.println("localTime=>"+localTime);
//转LocalDateTime
LocalDateTime localDateTime= zonedDateTime.toLocalDateTime();
System.out.println("localDateTime=>"+localDateTime);
//转Instant
Instant instant= zonedDateTime.toInstant();
System.out.println("instant=>"+instant);
}
【输出结果】
localDate=>2023-06-06
localTime=>00:57:07.011
localDateTime=>2023-06-06T00:57:07.011
instant=>2023-06-05T16:57:07.011Z
新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。
LocalDateTime是JDK1.8开始的新特性,主要的核心类有:
1、时间和日期类:LocalDateTime-获取年月日时分秒 LocalDate-年月日 LocalTime-时分秒
【2、带时区的日期和时间:ZonedDateTime】
详解地址:https://blog.csdn.net/tangshiyilang/article/details/131058869
【3、时刻:Instant是时间线上的一个瞬时点。】
Java中Date类的toInstant()方法用于将Date对象转换为Instant对象。在转换过程中会创建一个Instant,用于表示时间轴上与此日期相同的点。
【4、时区:ZoneId,ZoneOffSet】
java.time.ZoneOffset.ofHours(int hours)方法使用以小时为单位的偏移量获取 ZoneOffset 的实例
ZoneId.systemDefault():获取时区名称 输出:Asia/Shanghai
【5、时间间隔:Period,Duration】
使用详解:https://blog.csdn.net/tangshiyilang/article/details/131178453
6、Month月份
7、Week周
8、Clock: