Date-Time、DateTimeFormatter
时区
整个地球分为 ⼆ ⼗四时区,每个时区都有 ⾃ ⼰的本地时间。为了统 ⼀,使 ⽤ ⼀个统 ⼀的时间,称为全球标准时间(UTC, Universal Time Coordinated)。
TC 与格林尼治平均时(GMT, Greenwich Mean Time,也翻译成:格林威治标准时间)差不多一样。
CST(北京时间),北京时间,China Standard Time,中国标准时间。在时区划分上,属东八区,⽐协调世界时早 8⼩时,记为 UTC+8。
时间戳:⾃ 1970 年 1 ⽉ 1 ⽇(08:00:00 GMT)⾄当前时间的总秒数,它也被称为 Unix 时 间戳(Unix Timestamp),⼴泛的运 ⽤在知识产权保护、 合同签字、 ⾦融帐务、 电 ⼦报价投 标、 股票交易等 ⽅ ⾯。
格式多种:2050-10-31 10:11:11、 2050/10/31 10/10:10 年、⽉、⽇、周⼏等
Date 类
java.util 包提供了 Date 类来封装当前的 ⽇期和时间。
构造函数
//当前时间
Date()
//从1970年1⽉1⽇起的毫秒数作为参数
Date(long millisec)
常见方法
//返回⾃ 1970 年 1 ⽉ 1 ⽇ 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
long getTime( )
//调⽤此⽅法的Date对象在指定⽇期之后返回true,否则返回false。
boolean after(Date date)
//调⽤此⽅法的Date对象在指定⽇期之前返回true,否则返回false。
boolean before(Date date)
JDK8 时间日期处理类
- Java 8 通过发布新的 Date-Time API (JSR 310)来进 ⼀步加强对 ⽇期与时间的处理
- 新增了很多常 ⻅的 API,如 ⽇期/时间的 ⽐较,加减,格式化等
- 包所在位置 java.time
- 核心类
LocalDate:不包含具体时间的⽇期。 年月日
LocalTime:不含⽇期的时间。 时分秒
LocalDateTime:包含了⽇期及时间。
LocalDate API 示例
@Test
public void localDateTesting(){
LocalDate today = LocalDate.now();
//年月日
System.out.println("今天的日期:" + today);//今天的日期:2019-12-24
//年
System.out.println("现在是哪一年:" + today.getYear());//现在是哪一年:2019
//月
System.out.println("现在是哪一月:" + today.getMonth());//现在是哪一月:DECEMBER
//月(赎数字)
System.out.println("现在是哪一月(数字):" + today.getMonthValue());//现在是哪一月(数字):12
//日
System.out.println("现在是几号:" + today.getDayOfMonth());//现在是几号:24
//周几
System.out.println("现在是周几:" + today.getDayOfWeek());//现在是周几:TUESDAY
//一年中的第几天
System.out.println("一年中的第几天:" + today.getDayOfYear());//一年中的第几天:358
//加减年份, 加后返回的对象才是修改后的, 旧的依旧是旧的
LocalDate newDate = today.plusYears(1);
System.out.println("修改好的日期:" + newDate);//修改好的日期:2020-12-24
System.out.println("未修改的日期:" + today);//未修改的日期:2019-12-24
//日期比较(2020年在2019年之后:true)
System.out.println("isAfter:" + newDate.isAfter(today));//isAfter:true
//getYear() int 获取当前⽇期的年份
//getMonth() Month 获取当前⽇期的⽉份对象
//getMonthValue() int 获取当前⽇期是第⼏⽉
//getDayOfWeek() DayOfWeek 表示该对象表示的⽇期是星期⼏
//getDayOfMonth() int 表示该对象表示的⽇期是这个⽉第⼏天
//getDayOfYear() int 表示该对象表示的⽇期是今年第⼏天
//withYear(int year) LocalDate 修改当前对象的年份
//withMonth(int month) LocalDate 修改当前对象的⽉份
//withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当⽉的⽇期
//plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
//plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉份数
//plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
//plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
//minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
//minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的⽉数
//minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
//minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
//compareTo(ChronoLocalDate other) int ⽐较当前对象和other对象在时间上的⼤⼩,返回值如果为正,则当前对象时间较晚,
//isBefore(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之前
//isAfter(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之后
//isEqual(ChronoLocalDate other) boolean ⽐较两个⽇期对象是否相等
}
LocalTime
省略
LocalDateTime
@Test
public void localDateTimeTesting(){
//现在时间日期
LocalDateTime today = LocalDateTime.now();//2019-12-24T13:14:33.560
System.out.println(today);
//自定义时间日期
LocalDateTime newLocalDateTime = LocalDateTime.of(2020, 12, 24, 13, 14, 33);
//计算⽇期时间差 第二个参数减第一个参数 java.time.Duration
Duration duration = Duration.between(today, newLocalDateTime);
System.out.println(duration.toDays());//两个时间差的天数 365
System.out.println(duration.toHours());//两个时间差的⼩时数 8783
System.out.println(duration.toMinutes());//两个时间差的分钟数 527035
System.out.println(duration.toMillis());//两个时间差的毫秒数 31622129130
System.out.println(duration.toNanos());//两个时间差的纳秒数 31622129130000000
}
时间日期格式化
程序打印,或者 ⽹ ⻚显示时间 ⽇期格式,⽤户有不同的需求,则需要根据 ⼀定的规则进 ⾏格式化。
常用占位符
y 四位数年份
M ⽉
d ⽇
h 时 在上午或下午 (1~12)
H 时 在⼀天中 (0~23)
m 分
s 秒
S 毫秒
JDK8 之后引入线程安全的日期与时间DateTimeFormatter
@Test
public void formatTest(){
//创建当前时间对象
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2019-12-24T13:04:29.124
//格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String localDateTimeStr = dateTimeFormatter.format(localDateTime);
System.out.println(localDateTimeStr);//2019-12-24 13:06:04
}