1、Date1.1 Date实例化 Date date1 = new Date(); System.out.println(date1); //Thu Jun 16 19:18:56 CST 2022 1.2 获取日期毫秒数 getTime() System.out.println(date1.getTime()); //1655378336808System.out.println(System.currentTimeMillis
Date date1 = new Date();
System.out.println(date1); //Thu Jun 16 19:18:56 CST 2022
1.2 获取日期毫秒数
getTime()
System.out.println(date1.getTime()); //1655378336808
System.out.println(System.currentTimeMillis()); //通过系统获取时间1655378336867
1.3 日期格式化(从Date到String)
format(Date date)
SimpleDateFormat sdf1 = new SimpleDateFormat();
sdf1.applyPattern("yyyy-MM-dd HH:mm:ss"); //日期格式
System.out.println(sdf1.format(date1)); //2022-06-16 19:18:56
//简写
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf3.format(new Date()));
源码
public final String format(Date date)
{
return format(date, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
字符串格式化的日期格式串的含义
//yyyy:四位的年 yy:两位的年
//MM 月份(0-11,代表1-12月)
//DD 年中的天数
//dd 月份中的天数(当前的天数,第几天)
//HH 24小时制(0-23)
//hh 12小时制(1-12)
//mm 分钟
//ss 秒数
//SSS 毫秒
1.4 日期解析(从String到Date)
parse(String source)
String dateStr = "2021-06-16 11:45:45";
Date date2 = null;
try {
//转换日期时,需要进行异常处理,处理ParseException,因为日期字符串可能不匹配
date2 = sdf3.parse(dateStr);
System.out.println(date2); //Wed Jun 16 11:45:45 CST 2021
} catch (ParseException e) {
e.printStackTrace();
}
源码
public Date parse(String source) throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException("Unparseable date: \"" + source + "\"" ,
pos.errorIndex);
return result;
}
1.5 日期比较
//日期比较,日期是对象,不可以直接使用比较运算符进行比较
方式1:直接比较两个日期对应的毫秒数,谁大,谁的日期就大(晚)
String beginTime = new String("2020-08-09 13:32:20");
String endTime = new String("2099-10-08 11:21:32");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date beginDate = df.parse(beginTime);
Date endDate = df.parse(endTime);
//因为时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。所以毫秒数越大时间越晚
if(beginDate.getTime() < endDate.getTime()){ //beginDate is before endDate
System.out.println("beginDate is before endDate");
}else{
System.out.println("beginDate is after endDate");
}
方式2:借助Date的自带比较方法:before和after
if (beginDate.before(endDate)) {
System.out.println("beginDate is before endDate");//beginDate is before endDate
}
if (endDate.after(beginDate)) {
System.out.println("endDate is after beginDate");//endDate is after beginDate
}
1.6 时间增加
增加毫秒数
//在当前基础上,增加1小时30分钟
Date date3 = new Date();
System.out.println("当前时间:"+sdf3.format(date3));//2022-06-16 19:50:20
//增加1小时30分钟,需要获取当前毫秒数,在加上1小时30分钟毫秒数
long time3 = date3.getTime();
long addTime = (60+30)*60*1000;
//根据毫秒数,转换为日期对象
Date date4 = new Date(time3 + addTime);
System.out.println("新时间:"+sdf3.format(date4));//2022-06-16 21:20:20
2、Calendar
2.1创建日历类对象
创建日历类对象,不是new出来的,而是通过日历类自带的静态方法getInstance,获取;
Calendar calendar = Calendar.getInstance();
源码
public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(),
Locale.getDefault(Locale.Category.FORMAT));
}
2.2获取相关信息
//获取年份
int year = calendar.get(Calendar.YEAR);
System.out.println("当前年份:"+year);//2022
//获取月份,0-11代表1-12月,真实月份要+1
int month = calendar.get(Calendar.MONTH);
System.out.println("当前第几个月份:"+month);//5 代表6月份
//获取天数,是一年中哪一天
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("当前天是一年中的第:"+dayOfYear); //167
2.3 通过日历类对日期进行操作
//通过日历类,获取当前日期对象
Date date = calendar.getTime();
System.out.println("当前日期:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); //2022-06-16 20:03:10
//在当前时间的基础上,灵活的添加时间,增加1小时30分钟
calendar.add(Calendar.HOUR,1);
calendar.add(Calendar.MINUTE,30);
System.out.println("新日期:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime())); //2022-06-16 21:33:10
//通过日历类,创建时间对象
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.YEAR,2021);
calendar2.set(Calendar.MONTH,6-1);
calendar2.set(Calendar.DAY_OF_MONTH,16);
System.out.println("新日期:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime())); //2022-06-16 21:33:10