一.Date类
java.util.Date类表示特定的瞬间,精确到毫秒。
关于Date类,其拥有多个都早函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
1.public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
2.public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00GMT)以来的指定毫秒数。
tips:由于我们处于东八区,所以我们的基准时间为1970年1月1日08:00:00
System.currentTimeMillis():时间原点到当前时间的毫秒数
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻,例如:
public class Demo07Date { public static void main(String[] args) { // 获取当前系统一共到1970年1月1日08:00:00一共经历了多少毫秒 System.out.println(System.currentTimeMillis()); demo01(); demo02(); } //Date类空参构造方法 // 获取当前系统的日期和时间 private static void demo01(){ Date date = new Date(); System.out.println(date); // 不是地址,证明重写了toString()方法 } // Date类含参构造方法 // 参数:毫秒值 private static void demo02(){ Date date = new Date(1613837296858L); // 记住是L型 System.out.println(date); } }
运行截图:
即:使用System.currentTimeMillis():时间原点到当前时间的毫秒数;使用无参构造方法获得当前日期,精确到毫秒;使用有参构造方法将毫秒值转换为日期
3.getTime():返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数。(将日期转换为毫秒),相当于System.currentTimeMillis()
// Date类的getTime方法 // 返回自时间原点到当前时间的毫秒数 // 相当于System.currentTimeMillis() private static void demo03(){ Date date = new Date(); date.getTime(); }
二.DateFormat类
java.text.DateFormat是日期/时间格式化子类的抽象类,通过这个类可以帮助完成日期和文本之间的转换,也就是可以在Date对象和String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定的格式,从String对象转换为Date对象。
成员方法:String format(Date date) 按照指定模式,把Date日期,格式化为符合模式的字符串
Date parse(String source) 把符合模式的字符串,解析为Date日期
构造方法:由于DateFrame为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。
public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式。
格式规则
常用的格式规则为:
y 年
M 月
d 日
H 时
m 分
s 秒
写对应的模式,会把模式替换成对应的日期和时间:yyyy-MM-dd HH:mm:ss
注意:模式中的字母不能更改,连接模式的符号可以改变。
格式化方法:
private static void demo01(){ //1.创建SimpleDateFormat对象,构造方法中传递指定的模式 SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); // 2.调用SimpleDateFormat对象中的方法format, // 按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本) Date date = new Date(); // date.getTime(); // 获得当前日期 String d = sdf.format(date); // 按模式格式化当前日期 System.out.println(date); System.out.println(d); }
解析方法:
private static void demo02() throws ParseException { //1.创建SimpleDateFormat对象,构造方法中传递指定的模式 SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); // 2.按照构造方法中指定的模式,创建一个符合格式的字符串(文本) String str = "21-02-21 00:31:59"; // 3.调用SimpleDateFormat对象中的方法parse方法解析 Date date = sdf.parse(str); System.out.println(date); }
看API文档可以注意到这个parse方法,声明了一个异常。
查看源码:
public Date parse(String source) throws ParseException
意思:如果字符串和构造方法的模式不一样,那么程序就会抛出此异常。
(调用一个抛出了异常的方法,就必须处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理这个异常。)
二.Calendar类
java.util.Calendar是日历类,在Date后出现,替换掉了许多Date方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
获取方式:Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法:
publi static Calendar getInstance():使用默认时区和语言环境获得一个日历。
// 多态写法 Calendar c = Calendar.getInstance();
常用方法:
public int get(int field):返回给定日历字段的值
/* public int get(int field):返回给定日历字段的值 参数:传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR 返回值:日历字段代表的具体值 */ private static void demo01(){ Calendar calendar = Calendar.getInstance(); // 静态修饰的变量或方法都直属类,直接使用类名调用 int year = calendar.get(Calendar.YEAR); System.out.println(year); // 西方的月份0-11 int month = calendar.get(Calendar.MONTH) + 1; System.out.println(month); int day_of_month = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(day_of_month); }
public void set(int field,int value):将给定的日历字段设置为给定值
/* public void set(int field,int value):将给定的日历字段设置为给定值 参数:int field传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR int vaule给指定字段设定的值 */ private static void demo02(){ Calendar calendar = Calendar.getInstance(); // 设置为9999年9月9日 calendar.set(Calendar.YEAR,9999); System.out.println(calendar.get(Calendar.YEAR)); calendar.set(Calendar.MONTH,9); System.out.println(calendar.get(Calendar.MONTH)); // 可以同时设置年月日,set重载方法 calendar.set(Calendar.YEAR,9999,Calendar.MONTH,9,Calendar.DAY_OF_MONTH,9); }
public abstract void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量
/* public abstract void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量 参数:int field传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR int amount增加减少指定的值,正数增加,负数减少 */ private static void demo03(){ Calendar calendar = Calendar.getInstance(); // 把年增加2年 calendar.add(Calendar.YEAR,2); System.out.println(calendar.get(Calendar.YEAR)); // 把月份减少1月 calendar.add(Calendar.MONTH,-1); System.out.println(calendar.get(Calendar.MONTH) + 1); }
public Date getTime():返回一个表示此Calendar的时间值的Date对象
/* public Date getTime():返回一个表示此Calendar的时间值的Date对象 */ private static void demo04(){ Calendar calendar = Calendar.getInstance(); // 无参构造方法获得当前日期,精确到毫秒 Date date = new Date(); date = calendar.getTime(); // 打印对象,应为地址值,重写了toString方法 System.out.println(date); }