计算某一年某一月的天数
public static void getDayOfMonth (int year, int month) {
// 获取日历实例
Calendar time=Calendar.getInstance();
time.clear();
// 设置年
time.set(Calendar.YEAR,year);
// 设置月份
time.set(Calendar.MONTH,month);//注意,Calendar对象默认一月为0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
System.out.println(year + "年" + (month + 1) + "月份有" + day + "天");
}
Calendar和Date转化
// 获取时间戳对应的时间
Date d = new Date(1683976366L * 1000);
Calendar cal = Calendar.getInstance();
//Date转Calendar
cal.setTime(d);
//Calendar转换为Date
Date d2 = cal.getTime();
System.out.println(d.toString());
System.out.println("=================");
System.out.println(d2.toString());
运行结果
格式化输出日期时间
Date date=new Date();
// 注意:这里入参中"HH"如果写成"hh",获取的时间可能少12小时
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
System.out.println(df2.format(date));
运行结果
计算一年中的第几个星期
计算某一天是一年中的第几个星期
// 2023年1月20是今年的第几个星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2023);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 29);
int week=cal.get(Calendar.WEEK_OF_YEAR);
System.out.println(week);
运行结果
计算某一天是星期几
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date= formatter.parse("2023-06-01");
SimpleDateFormat formatter1 = new SimpleDateFormat("E");
System.out.println(formatter1.format(date));
运行结果
计算一年中的第几个星期是几号
// 2023年第20周的周一是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2023);
cal.set(Calendar.WEEK_OF_YEAR, 20);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
运行结果
年月周求日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM F E");
Date date= formatter.parse("2023-05 5 星期一");
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(formatter1.format(date));
运行结果
add()和roll()
add()
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2023);
cal.set(Calendar.MONTH, 4);
cal.set(Calendar.DAY_OF_MONTH, 13);
// 输出5月13号前4天是几号
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
运行结果
roll()
roll()在本月内循环,add()比较常用
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2023);
cal.set(Calendar.MONTH, 4);
cal.set(Calendar.DAY_OF_MONTH, 31);
cal.roll(Calendar.DATE, 4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
运行结果
计算两个任意时间中间间隔天数
传值为Calendar类型
public static void getIntervalDays (Calendar startDay, Calendar endDay) {
long startMsl = startDay.getTimeInMillis();
long endtMsl = endDay.getTimeInMillis();
long intervalMsl = endtMsl - startMsl;
int intervalDay = (int)(intervalMsl / (24 * 60 * 60 * 1000));
System.out.println(intervalDay);
}
传值为Date类型
错误演示
public static void getIntervalDays (Date startDay, Date endDay) {
long startMsl = startDay.getTime();
long endtMsl = endDay.getTime();
long intervalMsl = endtMsl - startMsl;
int intervalDay = (int)(intervalMsl / (24 * 60 * 60 * 1000));
System.out.println(intervalDay);
}
注意:这个代码中如果结束时间和开始时间相差12小时,算出来的相差天数为0。因为 intervalMsl / (24 * 60 * 60 * 1000) = 0(long类型的值/long类型的值,结果也为long类型)
正确方法
public static void getIntervalDays (Date startDay, Date endDay) {
long startMsl = startDay.getTime();
long endtMsl = endDay.getTime();
long intervalMsl = endtMsl - startMsl;
// 这里对intervalMsl做了类型强转,转为double类型。(double) intervalMsl / (24 * 60 * 60 * 1000)结果是0.5,然后通过Math.ceil()向上取整
int intervalDay = (int)(Math.ceil((double) intervalMsl / (24 * 60 * 60 * 1000)));
System.out.println(intervalDay);
}
获取系统的当前时间
public static void getCurTime () {
Long ctm = System.currentTimeMillis();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(ctm));
}
运行结果
字符串转化为时间类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss a", java.util.Locale.US);
Date date = simpleDateFormat.parse("5/13/2023 10:31:37 PM");
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat1.format(date));
运行结果