1.Data类
java.util.Date.表示指定的时间信息,不支持国际化 构造方法 new Date():当前系统日期和时间 new Date(long):给定日期和时间 主要方法: after(Date):判断当前日期对象是否在给定日期对象之后 before(Date):判断当前日期对象是否在给定日期对象之前 equals(Object):判断两个日期是否相等 compareTo(Date):比较两个日期的顺序,如果当前日期对象大于给定日期对象,返回正数,如果小于 给定日期对象,返回负数,如果等于给定日期对象,返回零
2. DataFormat
对日期类进行格化式和解析
DateFormat本身是一个抽象类,实例化的方式
一种是通过静态方法的调用,处理的是长日期和长时间类型
1.getDateInstance()
2.getTimeInstance()
3.getDateTimeInstance()
一种是通过创建子类对象
创建SimpleDateFormat对象,处理的是短日期和短时间类型
可以自定义格式
字母 | 日期或时间元素 |
y | 年 |
M | 月 |
d | 月份中的天数 |
E | 星期中的天数 |
H | 小时数(24小时) |
h | 小时数(12小时) |
m | 分钟数 |
s | 秒钟数 |
a | Am/Pm/上午/下午标记 |
S | 毫秒数 |
方法:
format(Data):将Data类型,格式化成字符串
parse(String):将字符串解析成Data类型
3.Calendar
一个抽象类
//获取实例对象
Calendar calendar=Calendar.getInstance();calendar.set(2000,Calendar.MAY,12);calendar.set(Calendar.HOUR_OF_DAY,9);//获取年份 月份 日期int year = calendar.get(Calendar.YEAR);System.out.println("year = " + year);int month = calendar.get(Calendar.MONTH)+1;//0-11System.out.println("month = " + month);int date = calendar.get(Calendar.DATE);System.out.println("date = " + date);int week = calendar.get(Calendar.DAY_OF_WEEK);//一周的第几天System.out.println("week = " + week);//从周日开始是第1天int day = calendar.get(Calendar.DAY_OF_MONTH);//一个月的第几天System.out.println("day = " + day);int dy = calendar.get(Calendar.DAY_OF_YEAR);System.out.println("dy = " + dy);int hour = calendar.get(Calendar.HOUR);//12小时制的System.out.println("hour = " + hour);int hour1=calendar.get(Calendar.HOUR_OF_DAY);//24小时制System.out.println("hour1 = " + hour1);int minute = calendar.get(Calendar.MINUTE);System.out.println("minute = " + minute);int second = calendar.get(Calendar.SECOND);System.out.println("second = " + second);*///Calendar转DateDate time = calendar.getTime();System.out.println(DateUtil.getSystemDateTime(time));//Date转成CalenderDate date= DateUtil.parse("yyyy-MM-dd HH:mm:ss","2012-01-31 10:10:23");calendar.setTime(date);
4.GregorianCalendar
格里高利历是公历的标准名称,教皇格里高利十三世于1582年颁布。公历纪元,又称“西元”
儒略历:公元前45年1月1日起执行的一种历法。一年12个月,大小月交替,四年一闰,平年365日,闰年366天。年平均长度365.25天。
1949年9月27日,中国政协通过,采用国际社会通用的西历和西元作业历法和纪年。
四年一闰,百年不闰,四百年一大闰
年均长度365天5小时49分12秒,按此计算方式,3000年左右误差一天。
判断闰年的方法 isLeapYear(int),返回一个boolean类型的值,1582年后,计算方式不同
5.JDK8新增日期工具类
LocalDate:获取本地日期
LocalTime:获取本地时间
LocalDateTime:获取本地日期和时间
单独获取日期时间类中的每个值
使用给定值修改日期
设置日期和时间的偏移量
Instant类
代表时间点,获取日期变更子午线时间
DateTimeFormatter格式化和解析
//将LocalDate转换成字符串String格式DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日");LocalDate date=LocalDate.now();String s = formatter.format(date);System.out.println(s);//将LocalDateTime转换成字符串String格式formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");LocalDateTime localDateTime = LocalDateTime.now();String s1 = formatter.format(localDateTime);System.out.println("s1 = " + s1);//将时间戳转换成字符串日期格式long x= Instant.now().toEpochMilli();LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(x), ZoneId.systemDefault());String s2=formatter.format(dateTime);System.out.println("s2 = " + s2);/* System.out.println(ZoneId.systemDefault());System.out.println("dateTime = " + dateTime);*///将字符解析成日期formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");String s4="2022-09-01";LocalDate parse1 = LocalDate.parse(s4, formatter);System.out.println("parse1 = " + parse1);//将字符解析成日期时间formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String s3="2022-05-01 12:20:30";LocalDateTime parse = LocalDateTime.parse(s3,formatter);System.out.println("parse = " + parse);
Period计算两个"日期"之间的间隔,得到的是年月日,假设2022年9月2日和2021年2月1日去计算得到相关1年7月1天,没办法知道具体多少天
LocalDate date1=LocalDate.of(1949,10,1);LocalDate date2=LocalDate.now();/*Period x = Period.between(date1, date2);System.out.println(x.getYears()); //获取相差年份System.out.println(x.getMonths()); //获取相差月份System.out.println(x.getDays()); //获取相差天数*///计算两个日期相差天数方法1long days = ChronoUnit.DAYS.between(date1, date2);System.out.println("days = " + days);//计算两个日期相差天数方法2long days1 = date2.toEpochDay() - date1.toEpochDay();System.out.println("days1 = " + days1);
Duration计算两个日期时间的间隔
public class Test8 {public static void main(String[] args) {LocalDateTime dateTime=LocalDateTime.of(1922,7,10,10,10,5);LocalDateTime now=LocalDateTime.now();//计算方式1Duration duration = Duration.between(dateTime, now);/* System.out.println(duration.toDays());//计算两个日期时间相差的天数System.out.println(duration.toHours());//计算两个日期时间相差的小时System.out.println(duration.toSeconds());//计算两个日期时间相差的秒数System.out.println(duration.getSeconds());//和上面相同*///计算方式2/*long days = dateTime.until(now, ChronoUnit.DAYS);System.out.println("days = " + days);long hours = dateTime.until(now, ChronoUnit.HOURS);System.out.println("hours = " + hours);long months = dateTime.until(now, ChronoUnit.MONTHS);System.out.println("months = " + months);*///计算方式3long years = ChronoUnit.YEARS.between(dateTime, now);System.out.println("years = " + years);long hours = ChronoUnit.HOURS.between(dateTime, now);System.out.println("hours = " + hours);long centuries= ChronoUnit.CENTURIES.between(dateTime, now);System.out.println("centuries = " + centuries);}
}
时间调节器
public class Test9 {public static void main(String[] args) {LocalDate date=LocalDate.now();//获取本周一时间LocalDate date1 = date.with(DayOfWeek.MONDAY);//获取下周一时间date1=date.with(TemporalAdjusters.next(DayOfWeek.MONDAY));//获取本月第一天date1=date.with(TemporalAdjusters.firstDayOfMonth());//获取本月最后一天date1=date.with(TemporalAdjusters.lastDayOfMonth());//获取本年第一天date1=date.with(TemporalAdjusters.firstDayOfYear());System.out.println(date1);}
}
Date类和LocalDate(LocalTime\LocalDateTime)转换
public class Test10 {public static void main(String[] args) {//将LocalDate转成DateLocalDate date2=LocalDate.now();ZonedDateTime zonedDateTime1 = date2.atStartOfDay().atZone(ZoneId.systemDefault());Instant instant = zonedDateTime1.toInstant();Date date1=Date.from(instant);String s = new SimpleDateFormat("yyyy-MM-dd").format(date1);System.out.println(s);//将LocalDateTime转成Date类型LocalDateTime date=LocalDateTime.now();ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());Instant instant1 = zonedDateTime.toInstant();Date date3=Date.from(instant1);String s1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date3);System.out.println(s1);//Date转成LocalDateDate date4=new Date();ZonedDateTime zonedDateTime = date4.toInstant().atZone(ZoneId.systemDefault());LocalDate date5=zonedDateTime.toLocalDate();System.out.println(date5);//Date转成LocalDateTimeDate date6=new Date();ZonedDateTime zonedDateTime = date6.toInstant().atZone(ZoneId.systemDefault());LocalDateTime date7=zonedDateTime.toLocalDateTime();LocalTime time=zonedDateTime.toLocalTime();System.out.println(date7);}
}
制作不易,麻烦大家点个赞,写的不好的请各路大神指点