两个时间差
package date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* 两个时间差
*
* @author Yuk
*/
public class GetDays {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:dd");
Calendar ca1 = Calendar.getInstance();
Calendar ca2 = Calendar.getInstance();
try {
ca1.setTime(sdf.parse("2017-07-25 15:06:00"));// 开始时间
ca2.setTime(sdf.parse("2017-07-27 15:06:00"));// 结束时间
long l = ca2.getTimeInMillis() - ca1.getTimeInMillis();// 结束时间(毫秒)-开始时间(毫秒)hh:mm:ss.SSS
int days = new Long(l / (1000 * 60 * 60 * 24)).intValue();// 毫秒转为天数
System.out.println("毫秒:"+l);
System.out.println(days);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
获取一个月的第一天与最后一天
package date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* 获取一个月的第一天与最后一天
*
* @author Yuk
*
*/
public class GetFirstOrEndDay {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c1 = Calendar.getInstance();
c1.add(Calendar.MONTH, 0);
c1.set(Calendar.DAY_OF_MONTH, 1);// 获取当前月份第一天
String persentDate = sdf.format(c1.getTime());
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.DAY_OF_MONTH,
c2.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取月份最后一天
String aftertDate = sdf.format(c2.getTime());
System.out.println("当月第一天:" + persentDate);
System.out.println("当月最后一天:" + aftertDate);
}
}
获取两个日期之间应上班天数(去除双休)
package date;
import java.util.Calendar;
import java.util.Scanner;
/**
* 获取两个日期之间应上班天数(去除双休)
*
* @author Yuk
*/
public class GetWorkDays {
public static void main(String[] args) {
System.out.println(getWorkDays("2017-05-01", "2017-05-31"));
Scanner scanner = new Scanner(System.in);
System.out.print("Please input the date(yyyy-MM): ");
String input = scanner.nextLine();
if (!input.matches("\\d{4}-\\d{2}")) {
System.out.println("Error input in format, exit!");
System.exit(0);
}
int count = 0;
int month = Integer.parseInt(input.substring(5, 7));
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(input.substring(0, 4)));
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DATE, 1);
while (cal.get(Calendar.MONTH) < month) {
int day = cal.get(Calendar.DAY_OF_WEEK);
if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
count++;
}
cal.add(Calendar.DATE, 1);
}
System.out.println(count);
}
/**
* 计算一段时间段内的上班天数
*
* @param startDate
* 起始时间
* @param endDate
* 结束时间
* @return 时间差(排除了双休)
*/
public static int getWorkDays(String startDate, String endDate) {
int count = 0;// 定义上班天数
int startDay = Integer.parseInt(startDate.substring(8));// 截取天
int startMonth = Integer.parseInt(startDate.substring(5, 7));// 截取月份
int startYear = Integer.parseInt(startDate.substring(0, 4));// 截取年份
int endDay = Integer.parseInt(endDate.substring(8));
int endMonth = Integer.parseInt(endDate.substring(5, 7));
int endYear = Integer.parseInt(endDate.substring(0, 4));
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, startDay);// 设置开始天
cal.set(Calendar.MONTH, startMonth - 1);// 设置开始月份
cal.set(Calendar.YEAR, startYear);// 设置开始年份
// cal.set(Calendar.DATE, 1);
boolean falg = true;
// 从起始日期开始循环
while (falg) {
System.out.println(cal.get(Calendar.YEAR) + " "
+ cal.get(Calendar.MONTH) + " "
+ cal.get(Calendar.DAY_OF_MONTH));
if (cal.get(Calendar.MONTH) == endMonth - 1
&& cal.get(Calendar.YEAR) == endYear
&& cal.get(Calendar.DAY_OF_MONTH) == endDay) {
// 如果循环到的当天是结束日期当天,则跳出循环
falg = false;
}
int day = cal.get(Calendar.DAY_OF_WEEK);
// 如果当天不是星期六或者星期天
if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
// 上班天数加1
count++;
}
// 每循环一次,天数日期加1
cal.add(Calendar.DATE, 1);
}
return count;
}
}
注:节假日不是固定的无法获取,每年的节假日只有在国务院公布后才知道