任何事,必作于细,也必成于实
—— 24.5.9
一、Date日期类
1.Date类的介绍
1.概述:
表示特定的瞬间,精确到亳秒
2.常识:
a.1000毫秒 =1秒
b.时间原点:1970年1月1日 0时0分0秒(UNIX系统起始时间),叫做格林威治时间,在0时区上
c.时区:北京位于东八区,一个时区经度差15度,时间相差一个小时,所以北京时间比时间原点所在时区时间差8个小时
d.北京经纬度:东经116北纬39.56->温带大陆性季风气候
e.赤道本初子午线(0度经线)2.Date类的使用
1.构造:
Date()->获取当前系统时间
Date(long time)-> 获取指定时间,传递亳秒值 -> 从时间原点开始算2.示例:
public static void main(String[] args) {date01();}private static void date01() {// Date()->获取当前系统时间Date date = new Date();System.out.println("Date():"+date);// Date(long time)-> 获取指定时间,传递亳秒值 -> 从时间原点开始算Date data1 = new Date(1000);System.out.println("Date(1000):"+data1);}
3.Date类的常用方法
1.void setTime(long time) --> 设置时间,传递亳秒值 --> 从时间原点开始算
2.long getTime() --> 获取时间,返回亳秒值
示例:
public static void main(String[] args) {date02();}private static void date02() {Date date = new Date();// 1.void setTime(long time) --> 设置时间,传递亳秒值 --> 从时间原点开始算date.setTime(1000);// 2.long getTime() --> 获取时间,返回亳秒值System.out.println(date.getTime());}
二、Calender日历类
1.概述:
日历类,抽象类
2.获取Calendar中的方法:
getinstance
static calendar getInstance()
import java.util.Calendar;public class Demo180Calender {public static void main(String[] args) {calender();}private static void calender() {// 构造方法Calendar calendar = Calendar.getInstance();System.out.println(calendar);} }
3.月份对比:
国外:0 1 2 3 4 5 6 7 8 9 10 11
国内:1 2 3 4 5 6 7 8 9 10 11 12
字段值 含义
YEAR 年
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF DAY 时(24小时制)
MINUTE 分
SECOND 秒
DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)4.常用方法
① int get(int field)->返回给定日历字段的值
② void set(int field,int value) :将给定的日历字段设置为指定的值③ void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
④ Date getTime():将calendar转成Date对象
private static void calender01() {Calendar calendar = Calendar.getInstance();// 多态// ① int get(int field)->返回给定日历字段的值int year = calendar.get(Calendar.YEAR);System.out.println("year1:"+year);// ② void set(int field,int value) :将给定的日历字段设置为指定的值calendar.set(Calendar.YEAR,2027);System.out.println("year2:"+calendar.get(Calendar.YEAR));// ③ void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量calendar.add(Calendar.YEAR,-1);System.out.println("year3:"+calendar.get(Calendar.YEAR));// ④ Date getTime():将calendar转成Date对象Date date = Calendar.getInstance().getTime();System.out.println("date = "+date);}
5.扩展方法
void set(int year,int month,int date) --> 直接设置年月日
需求:键盘输入一个年份,判断这一年是闰年,还是平年步骤:
1.创建Calendar对象
2.创建scanner对象,键盘录入一个年份
3.调用set方法,传递年,月,日,set(年,2,1)->国外是0-11,所以设置成2月就是代表3月
4.将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)5.获取day判断平年还是闰年,输出结果
private static void calender03() {// 1.创建Calendar对象Calendar calendar = Calendar.getInstance();// 2.创建Scanner对象,键盘录入一个年份Scanner sc = new Scanner(System.in);int year = sc.nextInt();// 3.调用set方法,传递年,月,日,set(年,2,1)->国外是0-11,所以设置成2月就是代表3月calendar.set(year,2,1);// 4.将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)calendar.add(Calendar.DATE,-1);int day = calendar.get(Calendar.DATE);// 5.获取day判断平年还是闰年,输出结果if(day == 29){System.out.println(year+"是闰年");}else{System.out.println(year+"是平年");}}
三、SimpleDateFormat日期格式化类
1.概述
格式化日期的类
2.构造
SimpleDateFormat(String pattern)
3.Pattern代表:
代表的是我们自己指定的日期格式,字母不能改变,但是中间的连接符可以改变
yyyy-MM-dd HH:mm:ss
y:年 M:月 dd:日 HH:时 mm:分 ss:秒
4.常用方法
1.String format(Date date) --> 将Date对象按照指定的格式转成String字符串
2.Date parse(String source) --> 将符合目期格式的String字符串转成Date对象
5.示例
public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 1.String format(Date date) --> 将Date对象按照指定的格式转成StringString time1 = sdf.format(new Date());System.out.println("time1 = "+time1);// 2.Date parse(String source) --> 将符合目期格式的字符串转成Date对象String time2 = "2002-11-04 11:30:31";// 3.处理异常Date date = sdf.parse(time2);System.out.println("date = "+date);}
四、JDK8新日期类
1.LocalDate本地日期
1.概述:
LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日
2.获取:
static LocalDate now() --> 创建LocalDate对象
static LocalDate of(int year,int month,int dayofMonth) --> 创建LocalDate对象,设置 年月日时分秒示例:
public static void main(String[] args) {// static LocalDate now() --> 创建LocalDate对象LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime);// static LocalDate of(int year,int month,int dayofMonth) --> 创建LocalDate对象,设置 年月日LocalDateTime localDateTime1 = LocalDateTime.of(2002,11,4,10,10,10);System.out.println(localDateTime1);}
3.获取日期字段的方法:名字get开头
① int getYear() --> 获取年份
② int getMonthvalue() --> 获取月份
③ int getDayofMonth() --> 获取月中的第几天示例:
public static void main(String[] args) {LocalDate localDate = LocalDate.now();// ① int getYear() --> 获取年份System.out.println(localDate.getYear());// ② int getMonthvalue() --> 获取月份 getMonth获取的是枚举,getMonthValue获取的是具体的日子System.out.println(localDate.getMonthValue());// ③ int getDayofMonth() --> 获取月中的第几天System.out.println(localDate.getDayOfMonth());}
4.设置日期字段的方法:名字是with开头
LocalDate withYear(int year):设置年份
LocalDate withMonth(int month):设置月份
LocalDate withDayofMonth(int day):设置月中的天数示例:
private static void with() {// LocalDate withYear(int year):设置年份LocalDate localDate = LocalDate.now();LocalDate localDate1 = localDate.withYear(2002);System.out.println(localDate1);// LocalDate withMonth(int month):设置月份LocalDate localDate2 = localDate.withMonth(11);System.out.println(localDate2);// LocalDate withDayofMonth(int day):设置月中的天数LocalDate localDate3 = localDate.withDayOfMonth(4);System.out.println(localDate3);// 链式调用赋值LocalDate localDate4 = localDate.withYear(2002).withMonth(11).withDayOfMonth(4);System.out.println(localDate4);}
5.日期字段偏移
设置日期字段的偏移量,方法名plus开头,向后偏移
设置日期字段的偏移量,方法名minus开头,向前偏移
示例:
private static void PlusAndMinus() {LocalDate localDate = LocalDate.now();LocalDate localDate1 = localDate.plusYears(1);System.out.println("localDate1 = "+ localDate1);LocalDate localDate2 = localDate1.minusYears(2);System.out.println("localDate2 = "+ localDate2);}
2.Period和Duration类
1.Period 计算日期之间的偏差
方法:
static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值
getyears()->获取相差的年
getMonths()->获取相差的月
getDays()->获取相差的天示例:
private static void period() {// static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值LocalDate local1 = LocalDate.of(2022,12,12);LocalDate local2 = LocalDate.of(2021, 11, 11);Period period = Period.between(local2,local1);// getrears()->获取相差的年System.out.println(period.getYears());// getMonths()->获取相差的月System.out.println(period.getMonths());// getDays()->获取相差的天System.out.println(period.getDays());}
2.Duration 计算时间之间的偏差
方法:
1.static Duration between(Temporal startInclusive, Temporal endExclusive) --> 计算时间差
2.Temporal:是一个接口,实现类:LocalDate、LocalDateTime
3.参数需要传递 Temporal 的实现类对象,注意要传递 LocalDateTime因为Duration计算精确时间偏差,所以需要传递能操作精确时间的 LocalDateTime
4.利用Dutation获取相差的时分秒 --> to开头
toDays():获取相差天数
toHours():获取相差小时
toMinutes():获取相差分钟
toMillis():获取相差秒(亳秒)示例:
private static void duration() {// toDays():获取相差天数// toHours():获取相差小时// toMinutes():获取相差分钟// toMillis():获取相差秒(亳秒)LocalDateTime local1 = LocalDateTime.of(2022,12,12,12,12,12);LocalDateTime local2 = LocalDateTime.of(2021, 11, 11,11,11,11);Duration duration = Duration.between(local2,local1);System.out.println(duration.toDays());System.out.println(duration.toHours());System.out.println(duration.toMinutes());System.out.println(duration.toMillis());}
如果计算年月日,就用Period
如果计算时分秒,就用Duration3.DateTimeFormatter 日期格式化类
获取:
static DateTimeFormatter ofPattern(String pattern) --> 获取对象,指定格式
方法:
private static void format() {DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime localDateTime = LocalDateTime.now();String time = dtf.format(localDateTime);System.out.println("time = "+time);}
TemporalAccessor parse(CharSequence text) --> 将符合规则的字符串转成日期对象
如果想将TemporalAccesssor转成我们常见的LocalDateTime日期对象,就需要用到LocalDateTime中的静态方法:
static LocalDateTime from(TemporalAccessor temporal)private static void parse() {DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String time = "2000-10-10 10:10:10";TemporalAccessor temporalAccessor = dtf.parse(time);System.out.println("temporalAccessor = "+temporalAccessor);LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);System.out.println("localDateTime = "+localDateTime);}