时间处理相关类
计算机世界,把1970年1月1日00:00:00定位基准时间,以毫秒为单位进行度量,1970年之后用正数表示,1970年之前用负数表示,用long类型的值来表示。
可以用下面的代码获取当前操作系统时间的毫秒数
long now = System.currentTimeMillis();
这个毫秒数是所有时间类的核心值,年月日都是按照这个数值计算出来的。
java.util.Date
常用构造方法:
Date():分配一个Data对象,并初始化次对象为系统当前的日期和时间
Date(long date):分配一个Date对象并初始化此对象,表示date毫秒数对应的日期和时间
Date d1 = new Date(); //没有传参默认当前时刻
System.out.println(d1);
Date d2 = new Date(1000L*3600*24*365*50); //传入毫秒数,返回对应日期的信息
System.out.println(d2);
/*
* Wed Mar 18 14:25:11 CST 2020
* Fri Dec 20 08:00:00 CST 2019
* /
常用方法
long getTime()
方法 | 作用 |
---|---|
long getTime() | 返回自1970年1月1日00:00:00到Date对象表示时间的毫秒数 |
boolean after(Date when) | 测试此日期是否在指定日期之后 |
boolean before(Date when) | 测试此日期是否在指定日期之前 |
boolean equals(Object obj) | 比较两个日期是否相等 |
String toString() | 把Date对象转换为String(格式:dow mon dd hh:mm:ss zzz yyyy) |
System.out.println(d1.getTime()); //1584514467267
System.out.println(d1.after(d2)); //true
System.out.println(d1.before(d2)); //false
System.out.println(d1.equals(d2)); //false
System.out.println(d1.toString()); //Wed Mar 18 14:54:27 CST 2020
}
DateFormat时间格式化类
DateFormat类的作用就是实现时间对象和指定格式字符串之间的转化。
DateFormat类是抽象类,一般使用它的子类SimpleDateFormat类来实现上述功能。
- 将Date对象转成字符串
Date d1 = new Date();
//规定字符串的格式
SimpleDateFormat s1 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
SimpleDateFormat s2 = new SimpleDateFormat("时间:hh-mm-ss 日期:MM月dd日 yyyy年");
//按照设定好的格式将Date对象转换成字符串
String daytime = s1.format(d1);
System.out.println(daytime); //2020/03/18 03:08:14
System.out.println(s2.format(d1)); //时间:03-21-20 日期:03月18日 2020年
需要注意的是:
①创建SimpleDateFormat类对象时需要指定好字符串格式。
②格式化字符含义是固定的,不可以改动。
字母 | 日期或时间元素 | 字母 | 日期或时间元素 |
---|---|---|---|
G | Era标志符 | H | 一天中的小时数(0-23) |
y | 年 | k | 一天中的小时数(1-24) |
M | 年中的月份 | K | am/pm中的小时数(0-11) |
w | 年中的周数 | h | am/pm中的小时数(1-12) |
W | 月份中的周数 | m | 小时中的分钟数 |
D | 年中的天数 | s | 分钟中的秒数 |
d | 月份中的天数 | S | 毫秒数 |
F | 月份中的星期 | z | 时区(General time zone) |
E | 星期中的天数 | Z | 时区(RFC 822 time zone) |
a | am/pm标记 |
③连接上面这些内容的字符或这顺序是可以改变的,可以按照需求组合输出格式。
- 将字符串转成Date对象
SimpleDateFormat s1 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
SimpleDateFormat s2 = new SimpleDateFormat("时间:hh-mm-ss 日期:MM月dd日 yyyy年");
//将符合格式的字符串转换成Date对象
//String time = ;
Date d2 = s1.parse("1988/4/16 5:20:00");
System.out.println(d2); //Sat Apr 16 05:20:00 CDT 1988
Date d3 = s2.parse("时间:05-20-20 日期:04月16日 1988年");
System.out.println(d3); //Sat Apr 16 05:20:00 CDT 1988
需要注意的是:
①字符串一定要严格按照规定好的格式,否则会报异常java.text.ParseException: Unparseable date
②字符串转换Date对象时需要抛出异常
Calendar日历类
Calendar类是一个抽象类,提供了日期计算相关功能。
GregorianCalendar类是Calendar类的一个子类,提供了世界上大多数国家/地区使用的标准日历系统。
- 获取日期相关信息get()
//当前时间2020-3-18,星期三
GregorianCalendar calendar = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR); //2020
int month = calendar.get(Calendar.MONTH); //2
//注意:月份用0-11表示,这里的2实际是三月
int day = calendar.get(Calendar.DAY_OF_MONTH); //18
int day2 = calendar.get(Calendar.DATE); //18
//注意:Calendar.DAY_OF_MONTH与Calendar.DATE含义相同
int date = calendar.get(Calendar.DAY_OF_WEEK); //4
//注意:星期用1-7表示,1代表sunday,2代表monday,以此类推
注:
①GregorianCalendar的常用构造:
GregorianCalendar(),无参构造,系统当前时间
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, )
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
②月份用0-11表示,星期用1-7表示且1为星期日,避免出错也可以直接用常量Calendar.JANUARY、Calendar.MONDAY等来表示。
- 设置日期相关信息set()
GregorianCalendar calendar1 = new GregorianCalendar();
calendar1.set(Calendar.YEAR, 1988);
calendar1.set(Calendar.MONTH,4);
calendar1.set(Calendar.DAY_OF_MONTH, 16);
System.out.println(calendar1.toString());
- 日期推算add()
//日期计算
GregorianCalendar calendar2 = new GregorianCalendar();
calendar2.add(Calendar.MONTH, -7); //月份减7
calendar2.add(Calendar.DATE, 7); //天数加7
- 日历对象和时间对象转化
//日历对象和时间对象转化
GregorianCalendar calendar3 = new GregorianCalendar();
Date d = calendar3.getTime();
calendar3.setTime(d);
System.out.println(d);