文章目录
- 1. Date类
- 1.1 简介
- 1.2 构造方法
- 1.3 主要方法
- 2. DateFormat 类
- 2.1 简介
- 2.2 实例化方式一:通过静态方法的调用
- 2.2 实例化方式二:通过创建子类对象
- 3. Calendar类
- 4. GregorianCalendar
1. Date类
1.1 简介
java.util.Date:表示指定的时间信息,不支持国际化
现在这个类的许多方法已经过时,一旦进入到多线程处理时,Date类就会出现许多问题,所以很多时候我们不太使用这个类,但是我们还是简单学习了解一下。
从上图中我们可以看到,Date类中的许多方法已经被弃用,下面我们来学习一下常见的方法。
1.2 构造方法
- new Date():当前系统日期和时间
- new Date(long):给定日期和时间
Date date=new Date();System.out.println(date);System.out.println(date.toLocaleString());System.out.println(date.toString());
运行结果:
可以看到,date和date.toString()输出结果是一样的,但是这种日期格式不是很好看。后面会详细学习其他日期解析格式方法。
1.3 主要方法
-
after(Date):判断当前日期对象是否在给定日期对象之后
-
before(Date):判断当前日期对象是否在给定日期对象之前
-
equals(Object):判断两个日期是否相等
-
compareTo(Date):比较两个日期的顺序,如果当前日期对象大于给定的日期对象,返回正数;如果小于给定的日期对象,返回负数;如果等于给定的日期对象,返回零。
Date date=new Date();//系统当前时间
Date date1=new Date(System.currentTimeMillis()-2000);//2秒之前的时间
Date date2=new Date(System.currentTimeMillis()-2000);//2秒之前的时间
//before
boolean before = date.before(date1);
System.out.println(before);//false
//after
boolean after = date.after(date1);
System.out.println(after);//true
//compareTo
int i = date1.compareTo(date2);
System.out.println(i);//0
int i1 = date.compareTo(date1);
System.out.println(i1);//1
int i2 = date1.compareTo(date);
System.out.println(i2);//-1
//equals
boolean equals = date1.equals(date2);
System.out.println(equals);//true
2. DateFormat 类
2.1 简介
- DateFormat 类是对日期类进行格式化和解析
- DateFormat 类本身是一个抽象类
- DateFormat 类实例化的方式:
- 一种是通过静态方法的调用
- 一种是通过创建子类对象
2.2 实例化方式一:通过静态方法的调用
通过静态方法的调用,处理的是长日期和长时间类型
-
getDateInstance():只显示日期(如:2022年9月1日)
-
getTimeInstance():只显示时间(如:12:40:53)
-
getDateTimeInstance():日期和时间都显示
Date date=new Date();DateFormat f=DateFormat.getDateInstance();String s = f.format(date);System.out.println("s = " + s);//s = 2023年12月2日f=DateFormat.getTimeInstance();String s1 = f.format(date);System.out.println("s1 = " + s1);//s1 = 下午2:05:22f=DateFormat.getDateTimeInstance();String s2 = f.format(date);System.out.println("s2 = " + s2);//s2 = 2023年12月2日 下午2:05:22
2.2 实例化方式二:通过创建子类对象
- SimpleDateFormat类继承自DateFormat类。
- 创建SimpleDateFormat对象,处理的是短日期(如:2022/9/1)和短时间(如:12:40)类型
我们可以自定义解析的格式:
字母 | 日期或时间元素 |
---|---|
y | 年 |
M | 月份 |
d | 月份中的天数 |
E | 星期中的天数 |
H | 小时数(24小时制) |
h | 小时数(12小时制) |
m | 分钟数 |
s | 秒数 |
a | Am/Pm 上午/下午标记 |
S | 毫秒数 |
//创建子类对象Date date=new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");String s = sf.format(date);System.out.println("s = " + s);//s = 2023-12-02sf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String s1 = sf.format(date);System.out.println("s1 = " + s1);//s1 = 2023-12-02 02:09:59sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String s2 = sf.format(date);System.out.println("s2 = " + s2);//s2 = 2023-12-02 14:09:59
方法:
- format(Date):将Date类型格式化成字符串
- parse(String):将字符串解析成Date类型
String str="1999-12-12";Date date=new SimpleDateFormat("yyyy-MM-dd").parse(str);System.out.println("date = " + date);//date = Sun Dec 12 00:00:00 CST 1999
扩展一下:我们电脑中的日期类型
3. Calendar类
这个类的使用频率比Date高。
Calendar是一个抽象类
Calendar获取年、月、日、星期等方法
//获取实例对象
Calendar calendar=Calendar.getInstance();
//获取年份 月份 日期
int year = calendar.get(Calendar.YEAR);
System.out.println("year = " + year);//这个月份的取值是0-11的
int month = calendar.get(Calendar.MONTH)+1;
System.out.println("month = " + month);int date = calendar.get(Calendar.DATE);
System.out.println("date = " + date);//一周的第几天,从周日开始是第1天
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("week = " + week);//一个月的第几天
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);//12小时制的
int hour = calendar.get(Calendar.HOUR);
System.out.println("hour = " + hour);//24小时制的
int hour1 = calendar.get(Calendar.HOUR_OF_DAY);
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自己设置时间:
//Calendar自己设置时间Calendar calendar=Calendar.getInstance();calendar.set(2023,Calendar.AUGUST,8);int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);System.out.println("year = " + year);System.out.println("month = " + (month+1));
Date 转Calender:
//Date 转CalenderCalendar calendar=Calendar.getInstance();Date date = DateUtil.parse("yyyy-MM-dd HH:mm:ss", "2023-8-8 15:30:54");calendar.setTime(date);int year = calendar.get(Calendar.YEAR);int hour = calendar.get(Calendar.HOUR_OF_DAY);System.out.println("year = " + year);System.out.println("hour = " + hour);
Calendar 转 Date:
//Calendar 转 DateCalendar calendar=Calendar.getInstance();Date date = calendar.getTime();System.out.println(DateUtil.getAllDateTime(date));
4. GregorianCalendar
格里高利历是公历的标准名称,教皇格里高利历十三世于1582年颁布。公历纪元,又称“西元”。
儒略历:公元前45年1月1日起执行的一种历法,一年12个月,大小月交替,四年一闰,平年365日,闰年366天。年平均长度365.25天。
1949年9月27日,中国政协通过,采用国际社会通用的西历和西元作业历法和纪年。
四年一闰,百年不闰,四百年一大闰。
年均长度365天5小时49分112秒,按此计算方式,3000年左右误差一天。
判断闰年的方法isLeapYear(int),返回一个boolean值,1582年后,计算方式不同。
public class Test1 {public static void main(String[] args) {GregorianCalendar calendar=new GregorianCalendar();boolean leapYear = calendar.isLeapYear(2000);//判断是否是闰年System.out.println("leapYear = " + leapYear);}
}