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();
        }

    }

}

获取一个月的第一天与最后一天

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;
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值