目录
DateTimeFormatter 用于实践的格式化和解析:
Date类
- ZoneId:时区
- Instant:时间戳
- ZoneDateTime:带时区的时间
ZoneId时区
方法名 | 说明 |
static Set<String> getAvailableZoneIds() | 获取java中支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定时区 |
使用方法:
import java.time.ZoneId;
import java.util.Set;
public class A01_ZoneIdDemo1 {
public static void main(String[] args) {
//1.获取所有时区的名称
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);
//获取集合的长度
System.out.println(zoneIds.size());//600
//2.获取当前系统的默认时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);// Asia/Shanghai
//3.获取指定的时区
ZoneId id = ZoneId.of("Asia/Aqtau");
System.out.println(id);// Asia/Aqtau
}
}
运行结果:
解释:
我们可以通过设置修改自己的自己的时区来改变上面zoneId的值
修该过之后:
第二步运行结果为:
Instant时间戳
方法名 | 说明 |
static Instant now() | 获取当前时间的Instant对象(标准时间) |
static Instant ofxxx(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
ZonedDateTime atZone(ZoneId zone) | 指定时区 |
boolean isxxx(Instant otherInstant) | 判断系列的方法 |
Instant minusXXX(long millisToSubtract) | 减少时间系列 |
Instant plusXXX(long millisToSubtract) | 增加时间系列 |
代码展示:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class ZoneIdDemo2 {
public static void main(String[] args) {
//1.获取当前时间对象
Instant now = Instant.now();
System.out.println(now);//2023-09-22T09:14:13.202621Z
//2.根据(秒/毫秒/纳秒)获取Instant对象
//秒
Instant instant1 = Instant.ofEpochSecond(0L);
System.out.println(instant1);//1970-01-01T00:00:00Z 1970-01-01T00:00:00Z是计算机时间原点
//毫秒
//在时间原点的基础上加上 1000毫秒
Instant instant2 = Instant.ofEpochMilli(1000L);
System.out.println(instant2);//1970-01-01T00:00:01Z 1000毫秒 = 1 秒
//纳秒
//第一个参数是秒,第二个参数是纳秒
//在时间原点的基础上加上 1秒 再加 1000 000 000纳秒
Instant instant3 = Instant.ofEpochSecond(1L, 1000000000L);
System.out.println(instant3);//1970-01-01T00:00:02Z
//3.指定时区输出当前时间
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);//2023-09-22T17:28:12.969746200+08:00[Asia/Shanghai]
//4.isXXX判断
//获取两个时间对象
Instant instant4 = Instant.ofEpochMilli(0L);
Instant instant5 = Instant.ofEpochMilli(1000L);
//用于时间的判断
//isAfter:判断调用者代表的时间时候在参数代表的时间之后
boolean result1 = instant5.isAfter(instant4);
//isBefore:判断调用者代表的时间时候在参数代表的时间之后前
boolean result2 = instant4.isBefore(instant5);
System.out.println(result1);//true
System.out.println(result2);//true
//5.Instant minusXXX(long millisToSubtract) 减少时间系列的方法
Instant instant6 = Instant.ofEpochSecond(5L);
//在instant6的基础上减一秒
Instant instant7 = instant6.minusSeconds(1L);
System.out.println(instant6);//1970-01-01T00:00:05Z
System.out.println(instant7);//1970-01-01T00:00:04Z
}
}
ZonedDateTime:带时区的时间:
方法名 | 说明 |
static ZonedDateTime now() | 获取当前时间的ZonedDateTime对象 |
static ZonedDateTime ofXXX() | 获取指定时间的ZonedDateTime对象 |
ZonedDateTime withXXX(时间) | 修改指定时间 |
ZonedDateTime minusXXX(时间) | 减少时间系列的方法 |
ZonedDateTime plusXXX(时间) | 增加时间系列的方法 |
使用方法:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class ZoneIdDemo3 {
public static void main(String[] args) {
//1.获取当前对象(带时区)
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now);//2023-09-22T18:08:42.481990200+08:00[Asia/Shanghai]
//2.获取指定是时间对象
//年月日时分秒纳秒方式指定
ZonedDateTime time = ZonedDateTime.of(2023, 10, 10, 12, 10, 48,
40, ZoneId.of("Asia/Shanghai"));
System.out.println(time);//2023-10-10T12:10:48.000000040+08:00[Asia/Shanghai]
//3.通过Instant+时区的方式指定获取的时间对象
Instant instant1 = Instant.ofEpochSecond(0L);
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant1, zoneId);
System.out.println(zonedDateTime);//1970-01-01T08:00+08:00[Asia/Shanghai]
//4.withXXX 修改时间系列
ZonedDateTime time1 = time.withYear(2021);
System.out.println(time1);//2021-10-10T12:10:48.000000040+08:00[Asia/Shanghai]
//5.减少时间
ZonedDateTime time2 = time.minusYears(10);
System.out.println(time2);//2013-10-10T12:10:48.000000040+08:00[Asia/Shanghai]
//6.增加时间
ZonedDateTime time3 = time.plusYears(10);
System.out.println(time3);//2033-10-10T12:10:48.000000040+08:00[Asia/Shanghai]
}
}
日期格式化类
DateTimeFormatter 用于实践的格式化和解析
DateTimeFormatter 用于实践的格式化和解析:
方法名 | 说明 |
static DateTimeFormatter of Pattern(格式) | 获取格式对象 |
String format(时间对象) | 按照指定方式格式化 |
使用方法:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class ZoneIdDemo4 {
public static void main(String[] args) {
//获取时间对象(带时区)
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
//static DateTimeFormatter of Pattern(格式) 获取格式对象
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss EE a");
//System.out.println(dtf1);
//String format(时间对象) 按照指定方式格式化
String format = dtf1.format(zonedDateTime);
System.out.println(format);//2023年09月22日 18时50分19 周五 下午
}
注意:jdk8新增的时间对象都是不可变的,如果修改了,减少了,增加了时间,那么调用者是捕获发生改变的,产生一个新的时间。