Java日期第一天最后一天

本文介绍了一个实用的日期工具类,包含获取指定日期所在周、月及旬的开始与结束日期的方法实现。通过这些方法,可以方便地进行日期范围的计算。

 同学叫我帮他写个小util类,我以前也没弄过,写了先存这儿,以后估计自己也得用。

 

public abstract class DateUtils {

    
/**
     * 取得日期所在周的第一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getFirstWeekDay(Date date) {
    initCalendar(date);
    gc.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    
return gc.getTime();
    }

    
    
/**
     * 取得日期所在周的最后一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getLastWeekDay(Date date) {
    initCalendar(date);
    gc.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    
return gc.getTime();
    }

 
    
/**
     * 取得日期所在月的最后一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getFirstMonthDay(Date date) {
    initCalendar(date);
    
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
    gc.add(Calendar.DAY_OF_MONTH, 
1 - dayOfMonth);
    
return gc.getTime();
    }

    
    
/**
     * 取得日期所在月的最后一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getLastMonthDay(Date date) {
    initCalendar(date);
    
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
    
int maxDaysOfMonth = gc.getActualMaximum(Calendar.DAY_OF_MONTH);
    gc.add(Calendar.DAY_OF_MONTH, maxDaysOfMonth 
- dayOfMonth);
    
return gc.getTime();
    }

    
    
/**
     * 取得日期所在旬的最后一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getFirstTenDaysDay(Date date) {
    initCalendar(date);
    
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
    
if(dayOfMonth <= 10{
        gc.set(Calendar.DAY_OF_MONTH, 
1);
    }
 else if(dayOfMonth > 20{
        gc.set(Calendar.DAY_OF_MONTH, 
21);
    }
 else {
        gc.set(Calendar.DAY_OF_MONTH, 
11);
    }

    
return gc.getTime();
    }

    
    
/**
     * 取得日期所在旬的最后一天
     * 
@param date
     * 
@return
     
*/

    
public static Date getLastTenDaysDay(Date date) {
    initCalendar(date);
    
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
    
if(dayOfMonth <= 10{
        gc.set(Calendar.DAY_OF_MONTH, 
10);
    }
 else if(dayOfMonth > 20{
        gc.set(Calendar.DAY_OF_MONTH, gc.getActualMaximum(Calendar.DAY_OF_MONTH));
    }
 else {
        gc.set(Calendar.DAY_OF_MONTH, 
19);
    }

    
return gc.getTime();
    }

    
    
private static void initCalendar(Date date) {
    
if(date == null{
        
throw new IllegalArgumentException("argument date must be not null");
    }

    
    gc.clear();
    gc.setTime(date);
    }

    
    
private static GregorianCalendar gc = null;
    
static {
    gc 
= new GregorianCalendar(Locale.CHINA);
    gc.setLenient(
true);
    gc.setFirstDayOfWeek(Calendar.MONDAY);
    }

    
    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
    Calendar c 
= Calendar.getInstance();
//    c.set(Calendar.MONTH, 7);
//    c.set(Calendar.DAY_OF_MONTH, 9);
    Date date = c.getTime();
    
    System.out.println(
"getFirstWeekDay = " + getFirstWeekDay(date));
    System.out.println(
"getLastWeekDay = " + getLastWeekDay(date));
    System.out.println(
"getFirstMonthDay = " + getFirstMonthDay(date));
    System.out.println(
"getLastMonthDay = " + getLastMonthDay(date));
    System.out.println(
"getFirstTenDaysDay = " + getFirstTenDaysDay(date));
    System.out.println(
"getLastTenDaysDay = " + getLastTenDaysDay(date));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值