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-11
System.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转Date
Date time = calendar.getTime();
System.out.println(DateUtil.getSystemDateTime(time));
//Date转成Calender
Date 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()); //获取相差天数
*/
//计算两个日期相差天数方法1
long days = ChronoUnit.DAYS.between(date1, date2);
System.out.println("days = " + days);
//计算两个日期相差天数方法2
long 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();
//计算方式1
Duration 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);*/
//计算方式3
long 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转成Date
LocalDate 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转成LocalDate
Date date4=new Date();
ZonedDateTime zonedDateTime = date4.toInstant().atZone(ZoneId.systemDefault());
LocalDate date5=zonedDateTime.toLocalDate();
System.out.println(date5);
//Date转成LocalDateTime
Date date6=new Date();
ZonedDateTime zonedDateTime = date6.toInstant().atZone(ZoneId.systemDefault());
LocalDateTime date7=zonedDateTime.toLocalDateTime();
LocalTime time=zonedDateTime.toLocalTime();
System.out.println(date7);
}
}
制作不易,麻烦大家点个赞,写的不好的请各路大神指点