java之日期






两个时间差

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

注:节假日不是固定的无法获取,每年的节假日只有在国务院公布后才知道








两个时间差

猜你喜欢

转载自blog.csdn.net/OYziqing/article/details/82559087