Calendar日期处理

一.  Calendar 类详解 

 

Calendar 类是一个抽象类,它为特定时间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。 
1、使用Calendar类别之前,要先知道Calendar的一些方法取回的数字是对应于Calendar本身的常数,也就是说并不是取回1 这个数字,就表示今天是星期一。 
a、想要取得时间,首先使用Calendar的getInstance()取得一个Calendar的实例,例如: 
Calendar rightNow = Calendar.getInstance(); 
b、如果现在您想知道是几年,则可以使用get()方法并指定常数,例如: 
System.out.println(rightNow.get(Calendar.YEAR)); 
c、如果是2005年,则上例会显示2005的数字,依照这个例子,假设撰写本文的时间是5月份,而现在想使用程式取得月份,则下例可能会有些困惑: 
System.out.println(rightNow.get(Calendar.MONTH)); 
d、程式会显示4这个数字,而不是预期的5,因为传回的4并不是代表月份,而是对应于Calendar.MAY常数的值, Calendar在月份上的常数值从Calendar.JANUARY开始是0,到Calendar.DECEMBER的11,所以如果想要显示传回值的真正意涵,可以如下撰写: 
String[] months = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月","九月", "十月", "十一月", "十二月"};
Calendar rightNow = Calendar.getInstance(); 
System.out.println(months[rightNow.get(Calendar.MONTH)]); 
 

//  初始值 
//  代码如下,值得指出的是由于我们的时区设置是GMT+8,所以打印格林威治时间得到的是1970-01-01 // 
//  08:00:00. 
Calendar cal = Calendar.getInstance();//得到当前时间 
cal.setTimeInMillis(0);//转换成格林威治时间 
//  获取值 
cal.get(Calendar.YEAR);//年 
cal.get(Calendar.MONTH) + 1;//月(必须要+1) 
cal.get(Calendar.DATE);//日 
cal.get(Calendar.HOUR_OF_DAY);//时 
cal.get(Calendar.MINUTE);//分 
cal.get(Calendar.SECOND);//秒 
cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情况下,周日是1,剩下自己推算) 
//  如果拿时间不是为了计算而是展示出来,肯定用SimpleDateFormart了,模式为yyyy-MM-dd HH:mm:ss 
//  设置值 
cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月) 
cal.set(Calendar.YEAR, 2014);//年 
cal.set(Calendar.MONTH, 7);//月(月份0代表1月) 
cal.set(Calendar.DATE, 11);//日 
cal.set(Calendar.HOUR_OF_DAY, 15);//时 
cal.set(Calendar.MINUTE, 33);//分 
cal.set(Calendar.SECOND, 32);//秒 
//  运算值 
cal.add(Calendar.YEAR, 1);//年 
cal.add(Calendar.MONTH, 1);//月 
cal.add(Calendar.DATE, 1);//日 
cal.add(Calendar.HOUR_OF_DAY, -1);//时 
cal.add(Calendar.MINUTE, 1);//分 
cal.add(Calendar.SECOND, 1);//秒 
cal.add(Calendar.DATE, 7);//周

 

二. 具体实例

package hk.com.cre.process.test;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
import org.springframework.util.StringUtils;
 
/**
 * 日期处理工具类
 * @author ouyangjun
 */
public class SomeDateUtils {
    
    // 日期处理格式
    public static String DATE_PATTERN_YYYYMMDD = "yyyy-MM-dd";
    
    /**
     * 把日期转成字符串格式
     * @param date
     * @return
     */
    public static String formatDateYYYYMMDD(Date date) {
        SimpleDateFormat timeFt = new SimpleDateFormat(DATE_PATTERN_YYYYMMDD);
        String timeStr = (date == null ? "" : timeFt.format(date));
        return timeStr;
    }
    
    /**
     * 某年第一天
     * @param year
     * @return
     */
    public static String getFirstDayOfYear(int year) {
        return getFirstDayOfQuarter(year, 1);
    }
 
    /**
     * 某年最后一天 
     * @param year
     * @return
     */
    public static String getLastDayOfYear(int year) {
        return getLastDayOfQuarter(year, 4);
    }
    
    /**
     * 某年某季度第一天
     * @param year
     * @param quarter
     * @return
     */
    public static String getFirstDayOfQuarter(int year, int quarter) {
        int month = 0;
        if (quarter > 4) {
            return null;
        } else {
            month = (quarter - 1) * 3 + 1;
        }
        return getFirstDayOfMonth(year, month);
    }
 
    /**
     * 某年某季度最后一天
     * @param year
     * @param quarter
     * @return
     */
    public static String getLastDayOfQuarter(int year, int quarter) {
        int month = 0;
        if (quarter > 4) {
            return null;
        } else {
            month = quarter * 3;
        }
 
        return getLastDayOfMonth(year, month);
    }
 
    /**
     * 某年某月的第一天
     * @param year
     * @param month
     * @return
     */
    public static String getFirstDayOfMonth(int year, int month) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month-1);
        c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
        
        return formatDateYYYYMMDD(c.getTime());
    }
 
    /**
     * 某年某月的最后一天
     * @param year
     * @param month
     * @return
     */
    public static String getLastDayOfMonth(int year, int month) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month-1);
        c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
        
        return formatDateYYYYMMDD(c.getTime());
    }
    
    /**
     * 某一年周的总数
     * @param startDate: yyyy-MM-dd
     * @param endDate: yyyy-MM-dd
     * @return
     */
    public static int getMaxWeekNumOfYear(String startDate, String endDate) {
        if(!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {
            SimpleDateFormat timeFt = new SimpleDateFormat(DATE_PATTERN_YYYYMMDD);
            try {
                Date start = timeFt.parse(startDate);
                Date end =  timeFt.parse(endDate);
                Calendar cal=Calendar.getInstance();
                cal.setTime(start);
                long time1=cal.getTimeInMillis();
                cal.setTime(end);
                long time2=cal.getTimeInMillis();
                long between_days=(time2-time1)/(1000*3600*24);
                Double days=Double.parseDouble(String.valueOf(between_days));
                if((days/7)>0 && (days/7)<=1){
                    //不满一周的按一周算
                    return 1;
                } else if(days/7>1){
                    int day=days.intValue();
                    if(day%7>0){
                        return day/7+1;
                    }else{
                        return day/7;
                    }
                }else if((days/7)==0){
                    return 0;
                }else{
                    //负数返还null
                    return 0;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return 0;
    }
    
    /**
     * 某年某周的第一天
     * @param year
     * @param week
     * @return
     */
    public static String getFirstDayOfWeek(int year, int week) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.WEEK_OF_YEAR, week);
        c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//设置周一
        c.setFirstDayOfWeek(Calendar.MONDAY);
        
        return formatDateYYYYMMDD(c.getTime());
    }
 
    /**
     * 某年某周的最后一天
     * @param year
     * @param week
     * @return
     */
    public static String getLastDayOfWeek(int year, int week) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.WEEK_OF_YEAR, week);
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
        
        return formatDateYYYYMMDD(c.getTime());
    }
    
    /**
     * 当前日期是几年第几周
     * @return
     */
    public static int getCurrentWeek() {
        Calendar cal = Calendar.getInstance();
        cal.setFirstDayOfWeek(Calendar.MONDAY);//设置周一为一周的第一天
        cal.setTime(new Date());
        return cal.get(Calendar.WEEK_OF_YEAR);
    }

}

转载自:https://www.cnblogs.com/windkl/p/5384327.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值