`
sun201200204
  • 浏览: 294459 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

计算时间

    博客分类:
  • java
阅读更多
http://www.blogjava.net/rrong-m/articles/281288.html



import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
/**
* 功能:计算时间
*     上月开始、上月结束、
*     本月开始、本月结束、
*     上周开始、上周结束、
*     本周开始、本周结束、
*     昨天开始、昨天结束、
*     今天开始、今天结束
*
* @version 2009-12-07
*
*/

public class StartAndEndOfDate {
    
    public static enum DateTag {
        LAST_MONTH_START,
        LAST_MONTH_END,
        THIS_MONTH_START,
        THIS_MONTH_END,
        LAST_WEEK_START,
        LAST_WEEK_END,
        THIS_WEEK_START,
        THIS_WEEK_END,
        LAST_DAY_START,
        LAST_DAY_END,
        THIS_DAY_START,
        THIS_DAY_END,
        THIS_DATE
    };
    
    /**
     * 功能:计算时间
     * 上月开始、上月结束、本月开始、本月结束、
     * 上周开始、上周结束、本周开始、本周结束、
     * 昨天开始、昨天结束、今天开始、今天结束
     * 格式:2007-06-01 00:00:00  2007-06-30 23:59:59
     * 本月结束、本周结束、今天结束 都指的是当前日期时间
     * 一周按照:星期一至星期天来计算
     *        由于Calendar中星期是从Sunday开始算的。
     *           所以上周的结束时间是这一周Calendar的start时间。
     *              本周的结束时间是下一周Calendar的start时间。
     * @param tag
     * @return String
     */
    public static String getStartAndEndDate(DateTag tag, Date date){
        String resultString;
        Calendar cal = Calendar.getInstance();
        Date nowdate = new Date();
        java.text.DateFormat formatFull = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String now = formatFull.format(nowdate);
        String this_date = formatFull.format(date);
        java.text.DateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
        switch (tag){
            case LAST_MONTH_START://上月开始
                cal.add(Calendar.MONTH, -1); 
//                cal.set(Calendar.DATE, 1); 
                cal.set(Calendar.DAY_OF_MONTH, 1);
                
                String lastMonthStart = format.format(cal.getTime())+" 00:00:00";//上月开始(上月1号)
                cal.clear();
                resultString = lastMonthStart;
                break;
            case LAST_MONTH_END://上月结束
                cal=Calendar.getInstance();
                cal.add(Calendar.MONTH, -1); 
                cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                String lastMonthEnd = format.format(cal.getTime())+" 23:59:59";//上月结束(上月最后一天)
                cal.clear();
                resultString = lastMonthEnd;
                break;
            case THIS_MONTH_START://本月开始
                cal=Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
//                cal.add(Calendar.MONDAY,0);
//                cal.set(Calendar.DAY_OF_MONTH, 1); 
                String thisMonthStart = format.format(cal.getTime())+" 00:00:00";//本月开始(本月1号)
                cal.clear();
                resultString = thisMonthStart;
                break;
            case THIS_MONTH_END://本月结束
                cal=Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                String thisMonthEnd = format.format(cal.getTime())+" 00:00:00";//本月开始(本月1号)
                cal.clear();
                //validate
                try {
                    if(formatFull.parse(thisMonthEnd).after(nowdate)){
                        thisMonthEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = thisMonthEnd;
                break;
            case LAST_WEEK_START://上周开始
                cal=Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, -1);
                /**
                 * Calendar.SUNDAY  1
                 * Calendar.MONDAY  2
                 */
                cal.set(Calendar.DAY_OF_WEEK, 2);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                String lastWeekStart = format.format(cal.getTime())+" 00:00:00";//上周开始(即:上周一)
                cal.clear();
                resultString = lastWeekStart;
                break;
            case LAST_WEEK_END://上周结束
                cal=Calendar.getInstance();
//                cal.add(Calendar.WEEK_OF_YEAR, 0);
                cal.set(Calendar.DAY_OF_WEEK, 1);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
                String lastWeekEnd = format.format(cal.getTime())+" 23:59:59";//上周结束(即:上周日)
                cal.clear();
                resultString = lastWeekEnd;
                break;
            case THIS_WEEK_START://本周开始
                cal=Calendar.getInstance();
//                cal.add(Calendar.WEEK_OF_YEAR, 0);
                cal.set(Calendar.DAY_OF_WEEK, 2);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                String thisWeekStart = format.format(cal.getTime())+" 00:00:00";
                cal.clear();
                resultString = thisWeekStart;
                break;
            case THIS_WEEK_END://本周结束  即下一周的Calendar开始时间
                cal=Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, 1);
                String thisWeekEnd = format.format(cal.getTime())+" 23:59:59";
                cal.clear();
                //validate
                try {
                    if(formatFull.parse(thisWeekEnd).after(nowdate)){
                        thisWeekEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = thisWeekEnd;
                break;
            case LAST_DAY_START://昨天开始
                cal = Calendar.getInstance();
//                cal.add(Calendar.DAY_OF_MONTH, -1);
//                cal.add(Calendar.DAY_OF_WEEK, -1);
                cal.add(Calendar.DAY_OF_YEAR, -1);
                format = new java.text.SimpleDateFormat("yyyy-MM-dd");
                String yesterdayStart= format.format(cal.getTime());
                yesterdayStart = yesterdayStart+" 00:00:00";//昨天开始
                cal.clear();
                resultString = yesterdayStart;
                break;
            case LAST_DAY_END://昨天结束
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, -1);
                format = new java.text.SimpleDateFormat("yyyy-MM-dd");
                String yesterdayEnd= format.format(cal.getTime());
                yesterdayEnd = yesterdayEnd+" 23:59:59";//昨天结束
                cal.clear();
                resultString = yesterdayEnd;
                break;
            case THIS_DAY_START://今天开始
                String todayStart=format.format(date)+" 00:00:00";//今天开始
                resultString = todayStart;
                break;
            case THIS_DAY_END://今天结束
                String todayEnd = format.format(date)+" 23:59:59";//今天开始
                try {
                    if(formatFull.parse(todayEnd).after(nowdate)){
                        todayEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = todayEnd;
                break;
            default://没有匹配的,返回当前时间
                resultString = this_date;
        }
        return resultString;
    }
    
    public static void main(String[] args) {
        Date date = new Date();
//        String last_month_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_MONTH_START);
        String this_month_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_MONTH_END,date);
//        String last_week_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_WEEK_START);
        String last_week_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_WEEK_END,date);
//        String this_week_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_WEEK_START);
        String this_week_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_WEEK_END,date);
//        String yesterday_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.YESTERDAY_START,date);
        String today_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_DAY_END,date);
        
        System.out.println(this_month_end);
    }
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics