高级JAVA开发必备技能:java8 新日期时间API((二)JSR-310:常用的日期时间API)(JAVA 小虚竹(1)

Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println(“now:”+now);


![image-202107234326190](https://img-blog.csdnimg.cn/img_convert/52a978b797d8b9409b70f239b92642b0.png)


## LocalDate


### LocalDate类说明


LocalDate表示本地日期。只有表示年月日。相当于:yyyy-MM-dd。


### LocalDate常用的用法


#### 获取当前日期



	LocalDate localDate1 = LocalDate.now();		
	LocalDate localDate2 = LocalDate.now(ZoneId.of("Asia/Shanghai"));		
	LocalDate localDate3 = LocalDate.now(Clock.systemUTC());
	System.out.println("now :"+localDate1);	
	System.out.println("now by zone :"+localDate2);
	System.out.println("now by Clock:"+localDate3);

![image-2021081496781](https://img-blog.csdnimg.cn/img_convert/6803e4fe90f265f84db734d4e60aa874.png)


#### 获取localDate对象



	LocalDate localDate1 = LocalDate.of(2021, 8, 14);
	LocalDate localDate2 = LocalDate.parse("2021-08-14");
	System.out.println(localDate1);		
	System.out.println(localDate2);

![image-2021081497325](https://img-blog.csdnimg.cn/img_convert/832fd97d61a612f6dc24d3a461c0ade2.png)


#### 获取指定日期的年月日



LocalDate localDate1 = LocalDate.of(2021, 8, 14);
// 当前日期年份:2021
System.out.println(localDate1.getYear());
// 当前日期月份对象:AUGUST
System.out.println(localDate1.getMonth());
// 当前日期月份:8
System.out.println(localDate1.getMonthValue());
// 该日期是当前周的第几天:6
System.out.println(localDate1.getDayOfWeek().getValue());
// 该日期是当前月的第几天:14
System.out.println(localDate1.getDayOfMonth());
// 该日期是当前年的第几天:226
System.out.println(localDate1.getDayOfYear());


![image-2021081498430](https://img-blog.csdnimg.cn/img_convert/743c702d98fd06c85ee1ae08584bab9e.png)


#### 修改年月日



	LocalDate localDate1 = LocalDate.of(2021, 8, 14);
	// 修改该日期的年份:2022-08-14
	System.out.println(localDate1.withYear(2022));
	// 修改该日期的月份:2021-12-14
	System.out.println(localDate1.withMonth(12));
	// 修改该日期在当月的天数:2021-08-01
	System.out.println(localDate1.withDayOfMonth(1));

![image-20210814935404](https://img-blog.csdnimg.cn/img_convert/c1da7ffda1dbaa3bc79ecf2967028bc1.png)


#### 比较日期



	LocalDate localDate1 = LocalDate.of(2021, 8, 14);
	// 比较指定日期和参数日期,返回正数,那么指定日期时间较晚(数字较大):13
	int i = localDate1.compareTo(LocalDate.of(2021, 8, 1));
	System.out.println(i);
	// 比较指定日期是否比参数日期早(true为早):true
	System.out.println(localDate1.isBefore(LocalDate.of(2021,8,31)));
	// 比较指定日期是否比参数日期晚(true为晚):false
	System.out.println(localDate1.isAfter(LocalDate.of(2021,8,31)));
	// 比较两个日期是否相等:true
	System.out.println(localDate1.isEqual(LocalDate.of(2021, 8, 14)));

![image-202108149597](https://img-blog.csdnimg.cn/img_convert/f462f2f401c28d3766700f7a0943f4a7.png)


#### LocalDate 和String相互转化、Date和LocalDate相互转化


##### LocalDate 和String相互转化



	LocalDate localDate1 = LocalDate.of(2021, 8, 14);
	// LocalDate 转 String
	DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	String dateString = localDate1.format(dateTimeFormatter);
	System.out.println("LocalDate 转 String:"+dateString);
	// String 转 LocalDate
	String str = "2021-08-14";
	DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	LocalDate date = LocalDate.parse(str, fmt);
	System.out.println("String 转 LocalDate:"+date);

![image-2021081499979](https://img-blog.csdnimg.cn/img_convert/94f13e96916afe58d8b5ac50188c50a9.png)


##### Date和LocalDate相互转化



// Date 转 LocalDate
	Date now = new Date();
	// 先将Date转换为ZonedDateTime
	Instant instant = now.toInstant();
	ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Asia/Shanghai"));
	LocalDate localDate = zonedDateTime.toLocalDate();
	// Sat Aug 14 23:16:28 CST 2021
	System.out.println(now);
	// 2021-08-14
	System.out.println(localDate);

	// LocalDate 转 Date
	LocalDate now1 = LocalDate.now();
	ZonedDateTime dateTime = now1.atStartOfDay(ZoneId.of("Asia/Shanghai"));
	Date date1 = Date.from(dateTime.toInstant());
	System.out.println(date1);

![image-2021081492237](https://img-blog.csdnimg.cn/img_convert/19c57533eb4945e7d6a71a647e6c260e.png)


## LocalDateTime


### LocalDateTime类说明


表示当前日期时间,相当于:yyyy-MM-ddTHH:mm:ss


### LocalDateTime常用的用法


#### 获取当前日期和时间



	LocalDate d = LocalDate.now(); // 当前日期
	LocalTime t = LocalTime.now(); // 当前时间
	LocalDateTime dt = LocalDateTime.now(); // 当前日期和时间
	System.out.println(d); // 严格按照ISO 8601格式打印
	System.out.println(t); // 严格按照ISO 8601格式打印
	System.out.println(dt); // 严格按照ISO 8601格式打印

![image-20210714857780](https://img-blog.csdnimg.cn/img_convert/88a2ca1f2ab378e9fb78c35b6c19578c.png)


由运行结果可行,本地日期时间通过now()获取到的总是以当前默认时区返回的


#### 获取指定日期和时间



	LocalDate d2 = LocalDate.of(2021, 07, 14); // 2021-07-14, 注意07=07月
	LocalTime t2 = LocalTime.of(13, 14, 20); // 13:14:20
	LocalDateTime dt2 = LocalDateTime.of(2021, 07, 14, 13, 14, 20);
	LocalDateTime dt3 = LocalDateTime.of(d2, t2);
	System.out.println("指定日期时间:"+dt2);
	System.out.println("指定日期时间:"+dt3);

![image-20210714803165](https://img-blog.csdnimg.cn/img_convert/e4815e85482b966bf64df64ee74af08d.png)


#### 日期时间的加减法及修改



	LocalDateTime currentTime = LocalDateTime.now(); // 当前日期和时间
	System.out.println("------------------时间的加减法及修改-----------------------");
	//3.LocalDateTime的加减法包含了LocalDate和LocalTime的所有加减,上面说过,这里就只做简单介绍
	System.out.println("3.当前时间:" + currentTime);
	System.out.println("3.当前时间加5年:" + currentTime.plusYears(5));
	System.out.println("3.当前时间加2个月:" + currentTime.plusMonths(2));
	System.out.println("3.当前时间减2天:" + currentTime.minusDays(2));
	System.out.println("3.当前时间减5个小时:" + currentTime.minusHours(5));
	System.out.println("3.当前时间加5分钟:" + currentTime.plusMinutes(5));
	System.out.println("3.当前时间加20秒:" + currentTime.plusSeconds(20));
	//还可以灵活运用比如:向后加一年,向前减一天,向后加2个小时,向前减5分钟,可以进行连写
	System.out.println("3.同时修改(向后加一年,向前减一天,向后加2个小时,向前减5分钟):" + currentTime.plusYears(1).minusDays(1).plusHours(2).minusMinutes(5));
	System.out.println("3.修改年为2025年:" + currentTime.withYear(2025));
	System.out.println("3.修改月为12月:" + currentTime.withMonth(12));
	System.out.println("3.修改日为27日:" + currentTime.withDayOfMonth(27));
	System.out.println("3.修改小时为12:" + currentTime.withHour(12));
	System.out.println("3.修改分钟为12:" + currentTime.withMinute(12));
	System.out.println("3.修改秒为12:" + currentTime.withSecond(12));

![image-20210714941902](https://img-blog.csdnimg.cn/img_convert/391472f879266d60a5d313b8a0796da9.png)


#### LocalDateTime和Date相互转化


##### Date转LocalDateTime



	System.out.println("------------------方法一:分步写-----------------------");
	//实例化一个时间对象
	Date date = new Date();
	//返回表示时间轴上同一点的瞬间作为日期对象
	Instant instant = date.toInstant();
	//获取系统默认时区
	ZoneId zoneId = ZoneId.systemDefault();
	//根据时区获取带时区的日期和时间
	ZonedDateTime zonedDateTime = instant.atZone(zoneId);
	//转化为LocalDateTime
	LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
	System.out.println("方法一:原Date = " + date);
	System.out.println("方法一:转化后的LocalDateTime = " + localDateTime);

	System.out.println("------------------方法二:一步到位(推荐使用)-----------------------");
	//实例化一个时间对象
	Date todayDate = new Date();
	//Instant.ofEpochMilli(long l)使用1970-01-01T00:00:00Z的纪元中的毫秒来获取Instant的实例
	LocalDateTime ldt = Instant.ofEpochMilli(todayDate.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
	System.out.println("方法二:原Date = " + todayDate);
	System.out.println("方法二:转化后的LocalDateTime = " + ldt);

![image-20210714210839339](https://img-blog.csdnimg.cn/img_convert/fef7dbb7e4ae8717d415490471be8959.png)


##### LocalDateTime转Date



	System.out.println("------------------方法一:分步写-----------------------");
	//获取LocalDateTime对象,当前时间
	LocalDateTime localDateTime = LocalDateTime.now();
	//获取系统默认时区
	ZoneId zoneId = ZoneId.systemDefault();
	//根据时区获取带时区的日期和时间
	ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
	//返回表示时间轴上同一点的瞬间作为日期对象
	Instant instant = zonedDateTime.toInstant();
	//转化为Date
	Date date = Date.from(instant);
	System.out.println("方法一:原LocalDateTime = " + localDateTime);
	System.out.println("方法一:转化后的Date = " + date);

	System.out.println("------------------方法二:一步到位(推荐使用)-----------------------");
	//实例化一个LocalDateTime对象
	LocalDateTime now = LocalDateTime.now();
	//转化为date
	Date dateResult = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
	System.out.println("方法二:原LocalDateTime = " + now);
	System.out.println("方法二:转化后的Date = " + dateResult);

![image-20210714211035080](https://img-blog.csdnimg.cn/img_convert/878a923c61fa76d95853b0c45e3f1d0a.png)


## LocalTime


### LocalTime类说明


LocalTime:本地时间,只有表示时分秒


### LocalTime常用的用法


#### 获取当前时间



	LocalTime localTime1 = LocalTime.now();
	LocalTime localTime2 = LocalTime.now(ZoneId.of("Asia/Shanghai"));
	LocalTime localTime3 = LocalTime.now(Clock.systemDefaultZone());

	System.out.println("now :"+localTime1);
	System.out.println("now by zone :"+localTime2);
	System.out.println("now by Clock:"+localTime3);

![image-2021081498171](https://img-blog.csdnimg.cn/img_convert/03a4f2ff0c10c2dce14fc2746663f79c.png)


#### 获取LocalTime对象



	LocalTime localTime1 = LocalTime.of(23, 26, 30);
	LocalTime localTime2 = LocalTime.of(23, 26);
	System.out.println(localTime1);
	System.out.println(localTime2);

![image-2021081494673](https://img-blog.csdnimg.cn/img_convert/3d508a6436f660ce5a94f9e9d2af79f6.png)


#### 获取指定日期的时分秒



	LocalTime localTime1 = LocalTime.of(23, 26, 30);
	//当前时间的时:23
	System.out.println(localTime1.getHour());
	//当前时间的分:26
	System.out.println(localTime1.getMinute());
	//当前时间的秒:30
	System.out.println(localTime1.getSecond());

![image-2021081492055](https://img-blog.csdnimg.cn/img_convert/12c935f86916a357e3e499294b8fc5d1.png)


#### 修改时分秒



	LocalTime localTime1 = LocalTime.of(23, 26, 30);
	//修改时间的时:00:26:30
	System.out.println(localTime1.withHour(0));
	//修改时间的分:23:30:30
	System.out.println(localTime1.withMinute(30));
	//修改时间的秒:23:26:59
	System.out.println(localTime1.withSecond(59));

![image-202108149774](https://img-blog.csdnimg.cn/img_convert/f9dfe1e34385a897f35162465c302b72.png)


#### 比较时间



	LocalTime localTime1 = LocalTime.of(23, 26, 30);
	LocalTime localTime2 = LocalTime.of(23, 26, 32);
	// 两个时间进行比较 大返回1,小就返回-1,一样就返回0:-1
	System.out.println(localTime1.compareTo(localTime2));

	// 比较指定时间是否比参数时间早(true为早):true
	System.out.println(localTime1.isBefore(localTime2));
	// 比较指定时间是否比参数时间晚(true为晚):false
	System.out.println(localTime1.isAfter(localTime2));
	// 比较两个时间是否相等:true
	System.out.println(localTime1.equals(LocalTime.of(23, 26, 30)));

![image-2021081498214](https://img-blog.csdnimg.cn/img_convert/2878d385ad0388945721f475b4f3f81b.png)


## OffsetDateTime


### OffsetDateTime类说明


OffsetDateTime:有时间偏移量的日期时间(不包含基于ZoneRegion的时间偏移量)



public final class OffsetDateTime
implements Temporal, TemporalAdjuster, Comparable, Serializable {
//The minimum supported {@code OffsetDateTime}, ‘-999999999-01-01T00:00:00+18:00’
public static final OffsetDateTime MIN = LocalDateTime.MIN.atOffset(ZoneOffset.MAX);
// The maximum supported {@code OffsetDateTime}, ‘+999999999-12-31T23:59:59.999999999-18:00’.
public static final OffsetDateTime MAX = LocalDateTime.MAX.atOffset(ZoneOffset.MIN);

}


上面的**MIN** 和**MAX** 是公有静态变量。


### OffsetDateTime常用的用法


#### 获取当前日期时间



	OffsetDateTime offsetDateTime1 = OffsetDateTime.now();
	OffsetDateTime offsetDateTime2 = OffsetDateTime.now(ZoneId.of("Asia/Shanghai"));
	OffsetDateTime offsetDateTime3 = OffsetDateTime.now(Clock.systemUTC());

	System.out.println("now :"+offsetDateTime1);
	System.out.println("now by zone :"+offsetDateTime2);
	System.out.println("now by Clock:"+offsetDateTime3);

![image-2021082196097](https://img-blog.csdnimg.cn/img_convert/541b46282750c47b2525e73c7fbdb6d9.png)


#### 获取OffsetDateTime对象



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	OffsetDateTime offsetDateTime1 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	OffsetDateTime offsetDateTime2 = OffsetDateTime. of(2021, 8, 15, 13, 14, 20,0, ZoneOffset.ofHours(8));
	Instant now = Instant.now();
	OffsetDateTime offsetDateTime3 = OffsetDateTime.ofInstant(now, ZoneId.of("Asia/Shanghai"));

	System.out.println(offsetDateTime1);
	System.out.println(offsetDateTime2);
	System.out.println(offsetDateTime3);

![image-20210821900413](https://img-blog.csdnimg.cn/img_convert/3742f4132bdd5a1a2d7719daf88c0955.png)


#### 获取指定日期的年月日时分秒



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	OffsetDateTime offsetDateTime1 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	//当前时间的年:2021
	System.out.println(offsetDateTime1.getYear());
	//当前时间的月:8
	System.out.println(offsetDateTime1.getMonthValue());
	//当前时间的日:15
	System.out.println(offsetDateTime1.getDayOfMonth());
	//当前时间的时:13
	System.out.println(offsetDateTime1.getHour());
	//当前时间的分:14
	System.out.println(offsetDateTime1.getMinute());
	//当前时间的秒:20
	System.out.println(offsetDateTime1.getSecond());

![image-2021082193542](https://img-blog.csdnimg.cn/img_convert/f3793af31e2f1bce1abbf7f5e2e98476.png)


#### 修改年月日时分秒



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	OffsetDateTime offsetDateTime1 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	//修改时间的年:2022-08-15T13:14:20+08:00
	System.out.println(offsetDateTime1.withYear(2022));
	//修改时间的月:2021-09-15T13:14:20+08:00
	System.out.println(offsetDateTime1.withMonth(9));
	//修改时间的日:2021-08-30T13:14:20+08:00
	System.out.println(offsetDateTime1.withDayOfMonth(30));
	//修改时间的时:2021-08-15T00:14:20+08:00
	System.out.println(offsetDateTime1.withHour(0));
	//修改时间的分:2021-08-15T13:30:20+08:00
	System.out.println(offsetDateTime1.withMinute(30));
	//修改时间的秒:2021-08-15T13:14:59+08:00
	System.out.println(offsetDateTime1.withSecond(59));

![image-2021082194524](https://img-blog.csdnimg.cn/img_convert/9650c14aaacf305ef7862697917e80dd.png)


#### 比较日期时间



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	OffsetDateTime offsetDateTime1 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	OffsetDateTime offsetDateTime3 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

	LocalDateTime localDateTime2 = LocalDateTime.of(2021, 8, 15, 13, 14, 30);
	OffsetDateTime offsetDateTime2 = OffsetDateTime.of(localDateTime2, ZoneOffset.ofHours(8));

	// 两个时间进行比较 大返回1,小就返回-1,一样就返回0:-1
	System.out.println(offsetDateTime1.compareTo(offsetDateTime2));

	// 比较指定时间是否比参数时间早(true为早):true
	System.out.println(offsetDateTime1.isBefore(offsetDateTime2));
	// 比较指定时间是否比参数时间晚(true为晚):false
	System.out.println(offsetDateTime1.isAfter(offsetDateTime2));
	// 比较两个时间是否相等:true
	System.out.println(offsetDateTime1.equals(offsetDateTime3));

![image-20210821944542](https://img-blog.csdnimg.cn/img_convert/c7c55af2e662620c69ce419c422de04c.png)


#### 字符串转化为OffsetDateTime对象



			String str = "2021-08-15T10:15:30+08:00";
	OffsetDateTime offsetDateTime1 = OffsetDateTime.parse(str);
	OffsetDateTime offsetDateTime2 = OffsetDateTime.parse(str,DateTimeFormatter.ISO_OFFSET_DATE_TIME);

	System.out.println(offsetDateTime1);
	System.out.println(offsetDateTime2);

![image-2021082196169](https://img-blog.csdnimg.cn/img_convert/ac32f804c85d9ad45f9422fb7fa52e54.png)


## OffsetTime


### OffsetTime类说明


OffsetTime:有时间偏移量的时间



public final class OffsetTime
implements Temporal, TemporalAdjuster, Comparable, Serializable {
//The minimum supported {@code OffsetTime}, ‘00:00:00+18:00’.
public static final OffsetTime MIN = LocalTime.MIN.atOffset(ZoneOffset.MAX);

//The maximum supported {@code OffsetTime}, '23:59:59.999999999-18:00'.
public static final OffsetTime MAX = LocalTime.MAX.atOffset(ZoneOffset.MIN);
...

}


上面的**MIN** 和**MAX** 是公有静态变量。


### OffsetTime常用的用法


#### 获取当前时间



	OffsetTime offsetTime1 = OffsetTime.now();
	OffsetTime offsetTime2 = OffsetTime.now(ZoneId.of("Asia/Shanghai"));
	OffsetTime offsetTime3 = OffsetTime.now(Clock.systemUTC());

	System.out.println("now :"+offsetTime1);
	System.out.println("now by zone :"+offsetTime2);
	System.out.println("now by Clock:"+offsetTime3);

![image-2021088203](https://img-blog.csdnimg.cn/img_convert/4b7062f66c1cbab98f41f73346f3d013.png)


#### 获取OffsetTime对象



	LocalTime localTime1 = LocalTime.of(13, 14, 20);
	OffsetTime offsetTime1 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));
	OffsetTime offsetTime2 = OffsetTime. of(13, 14, 20,0, ZoneOffset.ofHours(8));
	Instant now = Instant.now();
	OffsetTime offsetTime3 = OffsetTime.ofInstant(now, ZoneId.of("Asia/Shanghai"));

	System.out.println(offsetTime1);
	System.out.println(offsetTime2);
	System.out.println(offsetTime3);

![image-20210895380](https://img-blog.csdnimg.cn/img_convert/bc70fed36cdb50d842c66da9f774e5e9.png)


#### 获取指定时间的时分秒



	LocalTime localTime1 = LocalTime.of( 13, 14, 20);
	OffsetTime offsetTime1 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));

	//当前时间的时:13
	System.out.println(offsetTime1.getHour());
	//当前时间的分:14
	System.out.println(offsetTime1.getMinute());
	//当前时间的秒:20
	System.out.println(offsetTime1.getSecond());

![image-202108802988](https://img-blog.csdnimg.cn/img_convert/1336d659b6e9bc6f143ef2ad38b7f0e9.png)


#### 修改时分秒



	LocalTime localTime1 = LocalTime.of( 13, 14, 20);
	OffsetTime offsetTime1 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));

	//修改时间的时:00:14:20+08:00
	System.out.println(offsetTime1.withHour(0));
	//修改时间的分:13:30:20+08:00
	System.out.println(offsetTime1.withMinute(30));
	//修改时间的秒:13:14:59+08:00
	System.out.println(offsetTime1.withSecond(59));

![image-202108945483](https://img-blog.csdnimg.cn/img_convert/0b2cfba06da58dedab9439095db18f1e.png)


#### 比较时间



	LocalTime localTime1 = LocalTime.of( 13, 14, 20);
	OffsetTime offsetTime1 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));
	OffsetTime offsetTime3 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));

	LocalTime localTime2 = LocalTime.of(13, 14, 30);
	OffsetTime offsetTime2 = OffsetTime.of(localTime2, ZoneOffset.ofHours(8));
	// 两个时间进行比较 大返回1,小就返回-1,一样就返回0:-1
	System.out.println(offsetTime1.compareTo(offsetTime2));

	// 比较指定时间是否比参数时间早(true为早):true
	System.out.println(offsetTime1.isBefore(offsetTime2));
	// 比较指定时间是否比参数时间晚(true为晚):false
	System.out.println(offsetTime1.isAfter(offsetTime2));
	// 比较两个时间是否相等:true
	System.out.println(offsetTime1.equals(offsetTime3));

![image-2021089109890](https://img-blog.csdnimg.cn/img_convert/f2cd159153c302b6fd6f061c7b4f0cba.png)


## ZonedDateTime


### ZonedDateTime类说明


表示一个带时区的日期和时间,ZonedDateTime可以理解为LocalDateTime+ZoneId


从源码可以看出来,ZonedDateTime类中定义了LocalDateTime和ZoneId两个变量。


且ZonedDateTime类也是不可变类且是线程安全的。



public final class ZonedDateTime
implements Temporal, ChronoZonedDateTime, Serializable {

/\*\*

* Serialization version.
*/
private static final long serialVersionUID = -6260982410461394882L;

/\*\*

* The local date-time.
*/
private final LocalDateTime dateTime;
/**
* The time-zone.
*/
private final ZoneId zone;

...

}


### ZonedDateTime常用的用法


#### 获取当前日期时间



	// 默认时区获取当前时间
	ZonedDateTime zonedDateTime = ZonedDateTime.now();
	// 用指定时区获取当前时间,Asia/Shanghai为上海时区
	ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
	//withZoneSameInstant为转换时区,参数为ZoneId
	ZonedDateTime zonedDateTime2 = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New\_York"));
	System.out.println(zonedDateTime);
	System.out.println(zonedDateTime1);
	System.out.println(zonedDateTime2);

![image-202107205246938](https://img-blog.csdnimg.cn/img_convert/6111942ba504d9a2879f1868d189c31e.png)



	ZonedDateTime zonedDateTime1 = ZonedDateTime.now();
	ZonedDateTime zonedDateTime2 = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
	ZonedDateTime zonedDateTime3 = ZonedDateTime.now(Clock.systemUTC());

	System.out.println("now :"+zonedDateTime1);
	System.out.println("now by zone :"+zonedDateTime2);
	System.out.println("now by Clock:"+zonedDateTime3);

![image-202108957912](https://img-blog.csdnimg.cn/img_convert/12382c7d91b39915420485e123d581e3.png)


#### 获取ZonedDateTime对象



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	ZonedDateTime zonedDateTime2 = ZonedDateTime. of(2021, 8, 15, 13, 14, 20,0, ZoneOffset.ofHours(8));
	Instant now = Instant.now();
	ZonedDateTime zonedDateTime3 = ZonedDateTime.ofInstant(now, ZoneId.of("Asia/Shanghai"));

	System.out.println(zonedDateTime1);
	System.out.println(zonedDateTime2);
	System.out.println(zonedDateTime3);

![image-2021088020148](https://img-blog.csdnimg.cn/img_convert/d592ce784dcc58679ef2d6fef02154f1.png)


#### 获取指定日期的年月日时分秒



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	//当前时间的年:2021
	System.out.println(zonedDateTime1.getYear());
	//当前时间的月:8
	System.out.println(zonedDateTime1.getMonthValue());
	//当前时间的日:15
	System.out.println(zonedDateTime1.getDayOfMonth());
	//当前时间的时:13
	System.out.println(zonedDateTime1.getHour());
	//当前时间的分:14
	System.out.println(zonedDateTime1.getMinute());
	//当前时间的秒:20
	System.out.println(zonedDateTime1.getSecond());

![image-202108219231845](https://img-blog.csdnimg.cn/img_convert/edf03e4f5afa74fc61c0df0d13867faa.png)


#### 修改年月日时分秒



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
	//修改时间的年:2022-08-15T13:14:20+08:00
	System.out.println(zonedDateTime1.withYear(2022));
	//修改时间的月:2021-09-15T13:14:20+08:00
	System.out.println(zonedDateTime1.withMonth(9));
	//修改时间的日:2021-08-30T13:14:20+08:00
	System.out.println(zonedDateTime1.withDayOfMonth(30));
	//修改时间的时:2021-08-15T00:14:20+08:00
	System.out.println(zonedDateTime1.withHour(0));
	//修改时间的分:2021-08-15T13:30:20+08:00
	System.out.println(zonedDateTime1.withMinute(30));
	//修改时间的秒:2021-08-15T13:14:59+08:00
	System.out.println(zonedDateTime1.withSecond(59));

![image-20210821998](https://img-blog.csdnimg.cn/img_convert/61088d6227242128630b8252610a109c.png)


#### 比较日期时间



	LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
	ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

	ZonedDateTime zonedDateTime3 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

	LocalDateTime localDateTime2 = LocalDateTime.of(2021, 8, 15, 13, 14, 30);
	ZonedDateTime zonedDateTime2 = ZonedDateTime.of(localDateTime2, ZoneOffset.ofHours(8));

	// 两个时间进行比较 大返回1,小就返回-1,一样就返回0:-1
	System.out.println(zonedDateTime1.compareTo(zonedDateTime2));

	// 比较指定时间是否比参数时间早(true为早):true
	System.out.println(zonedDateTime1.isBefore(zonedDateTime2));
	// 比较指定时间是否比参数时间晚(true为晚):false
	System.out.println(zonedDateTime1.isAfter(zonedDateTime2));
	// 比较两个时间是否相等:true
	System.out.println(zonedDateTime1.equals(zonedDateTime3));


如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。



### 一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

### 二、学习软件



工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png)



### 四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)  

![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png)



### 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。



![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)



### 五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值