日期时间相关类Date,SimpleDateFormat,Calendar
Date类
构造函数
-
public Date()
分配 Date 对象并初始化此对象,以表示分配它系统的时间(精确到毫秒)。
-
Date(long millisec)
该参数是从1970年1月1日起的毫秒数。
常用方法
-
public long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
-
public String toString()
把此 Date 对象转换为以下形式的 String:
dow mon dd hh:mm:ss zzz yyyy其中:
dow 是星期几 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
dd 是一月中的某一天(01 至 31),显示为两位十进制数。
hh 是一天中的小时(00 至 23),显示为两位十进制数。
mm 是小时中的分钟(00 至 59),显示为两位十进制数。
ss 是分钟中的秒数(00 至 61),显示为两位十进制数。
zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。yyyy 是年份,显示为 4 位十进制数。
Demo
public static void main(String[] args){
// 创建当前时间的Date
Date date = new Date();
System.out.println(date);
// 当前时间的前一小时
long time = date.getTime() - (1*60*60*1000);
Date date1 = new Date(time);
System.out.println(date1);
}
Output:
Wed Jul 28 15:54:27 CST 2021
Wed Jul 28 14:54:27 CST 2021
SimpleDateFormat类
概述
DateFormat是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用
public static void main(String[] args){
/**
* y : 年
* M : 月
* d : 日
* H : 时
* m : 分
* s : 秒
*
* 2021年7月28日 16:08:00
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// format: 将data对象 转换成字符串("yyyy年MM月dd日 HH:mm:ss")
String text = format.format(new Date());
System.out.println(text);
// parse: 将字符串("yyyy年MM月dd日 HH:mm:ss")转换成data对象
Date date = null;
try {
date = format.parse("2020年8月1日 10:00:00");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
long time = (new Date().getTime() - date.getTime())/1000/60/60/24;
System.out.println(time);
}
Output:
2021年07月28日 16:21:37
Sat Aug 01 10:00:00 CST 2020
361
-
已知一个人的出生日期,求年龄
- 用SimpleDateFormat类中的parse方法,将String类型的字符串转换成Date类型
- 和通过getTime()获得的当前时间做减法,得到活着的时间(单位:ms),在转换成天数
Calendar类
概念
可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题,而且在实现方式上也比Date类要复杂一些;
构造函数
Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
创建一个代表系统当前日期的Calendar对象
//默认是当前日期
Calendar c = Calendar.getInstance();
常用方法
Set
public final void set(int year,int month,int date)
- Demo:
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12
利用字段类型设置
- 如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
- Demo:
public static void main(String[] args){
Calendar c1 = Calendar.getInstance();
// set方法一
c1.set(2022,0,10);
// set方法二
c1.set(Calendar.YEAR, 2022);
// 月份0-11,0相当于1月
c1.set(Calendar.MONTH, 0);
c1.set(Calendar.DATE, 10);
// 年份
int year = c1.get(Calendar.YEAR);
// 一年中的第几天
int day = c1.get(Calendar.DAY_OF_YEAR);
System.out.println(year);
System.out.println(day);
}
Output:
2022
10
Add
Calendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
- Demo:
public static void main(String[] args){
Calendar c1 = Calendar.getInstance();
c1.add(Calendar.MONTH, 3);
System.out.println(c1.get(Calendar.MONTH));
Date date = c1.getTime();
System.out.println(date);
}
Output:
9
Thu Oct 28 17:52:23 CST 2021
获取某字段的最大值
- 返回当前日期,给定字段的最大值
int getActualMaximum(int field)
- 返回当前日期,给定字段的最小值
int getActualMinimum(int field)