两个时间差
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();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
获取一个月的第一天与最后一天
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
获取两个日期之间应上班天数(去除双休)
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
注:节假日不是固定的无法获取,每年的节假日只有在国务院公布后才知道
两个时间差