Date类
表示特定的瞬间,精确到毫秒。
**public Date()**:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
**public Date(long date)**:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
1 2 3 4 5 6 7 8 9 10
| import java.util.Date;
Date date = new Date(); System.out.println(date);
Date date = new Date(0L); System.out.println(date);
date = new Date(3742767540068L); System.out.println(date);
|
tips: 在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
常用方法
public long getTime() 把日期对象转换成对应的时间毫秒值,相当于**System.currentTimeMillis()**方法,返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
1 2 3 4 5
| Date date = new Date();
long time = date.getTime();
System.out.println(time);
|
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java.text.SimpleDateFormat extends DateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准
构造方法:
SimpleDateFormat(String pattern),用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数:String pattern:传递指定的模式
模式:区分大小写的
写对应的模式,会把模式替换为对应的日期和时间 ,”yyyy-MM-dd HH:mm:ss”
模式中的字母不能更改,连接模式的符号可以改变,如 “yyyy年MM月dd日 HH时mm分ss秒”
常用方法
**public String format(Date date)**:将Date对象格式化为字符串
1 2 3 4 5 6 7 8 9 10 11
| import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); Date date = new Date(); String d = sdf.format(date);
System.out.println(date); System.out.println(d);
|
**public Date parse(String source)**:将字符串解析为Date对象
注意:
public Date parse(String source) throws ParseException
parse方法声明了一个异常叫ParseException
如果字符串和构造方法的模式不一样,那么程序就会抛出此异常
调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
private static void demo02() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); Date date = sdf.parse("2088年08月08日 15时51分54秒"); System.out.println(date); }
|
练习
请使用日期时间相关的API,计算出一个人已经出生了多少天。
1.获取当前时间对应的毫秒值
2.获取自己出生日期对应的毫秒值
3.两个时间相减(当前时间– 出生日期)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in); System.out.println("请输入您的出生日期,格式:yyyy-MM-dd"); String birthdayDateString = sc.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birthdayDate = sdf.parse(birthdayDateString); long birthdayDateTime = birthdayDate.getTime(); long todayTime = new Date().getTime();
long time = todayTime-birthdayDateTime; System.out.println(time/1000/60/60/24); }
|
Calendar类
日历类,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。
Calendar静态方法
**public static Calendar getInstance()**:使用默认时区和语言环境获得一个日历
1 2 3
| import java.util.Calendar; Calendar c = Calendar.getInstance(); System.out.println(c);
|
常用方法
**public int get(int field)**:返回给定日历字段的值
int field: 日历类的字段,可以使用Calendar类的静态成员变量获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static final int YEAR = 1; 年 public static final int MONTH = 2; 月 public static final int DATE = 5; 月中的某一天 public static final int DAY_OF_MONTH = 5;月中的某一天 public static final int HOUR = 10; 时 public static final int MINUTE = 12; 分 public static final int SECOND = 13; 秒
Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); System.out.println(year);
int month = c.get(Calendar.MONTH); System.out.println(month);
int date = c.get(Calendar.DATE); System.out.println(date);
|
**public void set(int field, int value)**:将给定的日历字段设置为给定值
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,9999);
c.set(Calendar.MONTH,9);
c.set(Calendar.DATE,9);
c.set(8888,8,8);
|
**public abstract void add(int field, int amount)**:根据日历的规则,为给定的日历字段添加或减去指定的时间量,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR,-2);
c.add(Calendar.MONTH,3);
int year = c.get(Calendar.YEAR); System.out.println(year);
int month = c.get(Calendar.MONTH); System.out.println(month);
int date = c.get(Calendar.DATE); System.out.println(date);
|
**public Date getTime()**:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
1 2 3 4
| Calendar c = Calendar.getInstance(); Date date = c.getTime(); System.out.println(date);
|
小贴士:
西方星期的开始为周日,中国为周一
在Calendar类中,月份的表示是以0-11代表1-12月
日期是有大小关系的,时间靠后,时间越大