注意:
1、因为历法改革,Java中的时间类显示不出来1582年10月5日到1582年的10月14日;并且从1582年1月1日到1582年10月4日则有10天偏差。
2、Java时间日期类如果参数不合理不会抛出异常。
java.util.Date类 (特定瞬间,精确到毫秒)
Date d = new Date();//当前的日期时间点(自动转换当前时区,CST代表北京时区)
Date d = new Date(2001,0,12);//2001年1月12日
Date d = new Date(678L);//这个毫秒值(long类型)的日期时间(自动转换当前时区,也可以是负数)
int y = d.getYear();//获取年(结果:122,实际年:1900+122=2022)
int m = d.getMonth();//获取月(结果:0,实际月:1+0 = 1)
int d = d.getDate();//获取日
int w = d.getDay();//获取星期几(周天=0,周一=1)
int h = d.getHours();//获取几点(0-23)
int min = d.getMinutes();//获取几分(0-59)
int s = d.getSeconds();//获取几秒(0-59)
int i = d1.compareTo(d2);//比较两个日期毫秒值
long l = d.getTime();//1970.1.1 00:00:00到当前时间毫秒数。与System.currentTimeMillis()一样
boolean b = d1.before(d2);//之前
boolean b = d1.after(d2);//之后
boolean b = d1.equals(d2);//是否相等
String s = d1.toLocaleString();//转换成当前时间格式字符串(结果 : 2018-1-23 10:15:06)
java.util.Calendar类 (日历)
//Calendar类(子类)对象,(自动转换当前时区,CST代表北京时区)
Calendar cal = Calendar.getInstance();
//获取
int y = cal.get(Calendar.YEAR);//获取年
int m = cal.get(Calendar.MONTH) + 1;//获取月(0-11),实际应用的时候需要加上1
int i = cal.getActualMaximum(Calendar.DAY_OF_MONTH);//获取当月最大值(最后一天)
int i = cal.getActualMinimum(Calendar.DAY_OF_MONTH);//获取当月最小值(第一天)
int d = cal.get(Calendar.DAY_OF_MONTH);//方法一:获取日
int d = cal.get(Calendar.DATE);//方法二:获取日
int w = cal.get(Calendar.DAY_OF_WEEK);//获取星期(1-7,1代表星期天)
int H = cal.get(Calendar.HOUR_OF_DAY);//获取小时(24小时)
int h = cal.get(Calendar.HOUR);//获取小时(12小时)
int min = cal.get(Calendar.MINUTE);//获取分钟
int s = cal.get(Calendar.SECOND);//获取秒
long l = cal.getTimeInMillis();//1970到现在的毫秒值
Date time = cal.getTime();//获取日历时间
//设置
cal.set(Calendar.HOUR_OF_DAY,23);//设置成23点
cal.set(Calendar.DAY_OF_MONTH, 5);//设置5号。
cal.set(2018, 1, 15, 23, 59, 59);//2018-02-15 23:59:59
cal.set(2001,1,2);//设置成2001年2月2日(时分秒没有变化)
//计算
cal.add(Calendar.MONTH,1);//加一个月(注意:如果是一月最后31日,加1个月是二月的最后一天,28号或29号)
cal.add(Calendar.WEEK_OF_MONTH,1);//方法一:当前时间 加1周
cal.add(Calendar.WEEK_OF_YEAR,1);//方法二:当前时间 加1周
cal.add(Calendar.DAY_OF_YEAR,1);//方法一:当前时间 加1天
cal.add(Calendar.DATE,-2);//方法二:当前时间 减2天
cal.add(Calendar.HOUR_OF_DAY, 6);//当前时间加6小时
cal.roll(Calendar.DATE,31);//减31天(注意:roll方法不会跳出当前月,也就是都在最多回到本月1号)
cal.roll(Calendar.MONTH,3);//减3月(注意:roll方法不会跳出当前年,也就是都在最多回到本年1月)
cal.roll(Calendar.YEAR,31);//减去31年,(注意:roll方法减去年,没有限制)
//比较
//格式化
String s = cal.getTime().toLocaleString();//当前时间字符串
java.text.SimpleDateFormat类(格式化和解析)
注意:
yyyy-MM-dd:正常的年月日。
YYYY-MM-dd:星期年,看这个星期属于哪个年,如果星期跨年了,会出现比实际年大一年。
//创建SimpleDateFormat对象 hh:mm:ss:12小时制 HH:mm:ss:24小时制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(new Date());//格式化(日期->文本)(结果 : 2000-01-23 10:59:57)
Date d = sdf.parse("2020-01-23 10:59:57");//解析(文本->日期)
DateFormatUtils工具类(org.apache.commons.lang3)
org.apache.commons.lang3.time.DateFormatUtils包下的工具类
<!--DateFormatUtils依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
// Date类型转String类型
String s = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
// String类型转Date类型
Date d = DateUtils.parseDate("2021-05-01 01:01:01", "yyyy-MM-dd HH:mm:ss");
// 计算一个小时后的日期
Date d = DateUtils.addHours(new Date(), 1);