任何事,必作于细,也必成于实
—— 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对象按照指定的格式转成String String 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); }