java实用类-Date 和 Calendar

java实用类-Date 和 Calendar

1、Date

1.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()); //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

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java实用类-Date 和 Calendar