日期的一些常见用法

import  java.text.ParsePosition;
import  java.text.SimpleDateFormat;
import  java.util.Calendar;
import  java.util.Date;
import  java.util.GregorianCalendar;
import  java.util.regex.Pattern;
  
import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
  
  
public  class  DateUtil {
     protected  static  Log logger = LogFactory.getLog(DateUtil. class );
  
     // 格式:年-月-日 小时:分钟:秒
     public  static  final  String FORMAT_ONE =  "yyyy-MM-dd HH:mm:ss" ;
  
     // 格式:年-月-日 小时:分钟
     public  static  final  String FORMAT_TWO =  "yyyy-MM-dd HH:mm" ;
  
     // 格式:年月日 小时分钟秒
     public  static  final  String FORMAT_THREE =  "yyyyMMdd-HHmmss" ;
  
     // 格式:年-月-日
     public  static  final  String LONG_DATE_FORMAT =  "yyyy-MM-dd" ;
  
     // 格式:月-日
     public  static  final  String SHORT_DATE_FORMAT =  "MM-dd" ;
  
     // 格式:小时:分钟:秒
     public  static  final  String LONG_TIME_FORMAT =  "HH:mm:ss" ;
  
     //格式:年-月
     public  static  final  String MONTG_DATE_FORMAT =  "yyyy-MM" ;
  
     // 年的加减
     public  static  final  int  SUB_YEAR = Calendar.YEAR;
  
     // 月加减
     public  static  final  int  SUB_MONTH = Calendar.MONTH;
  
     // 天的加减
     public  static  final  int  SUB_DAY = Calendar.DATE;
  
     // 小时的加减
     public  static  final  int  SUB_HOUR = Calendar.HOUR;
  
     // 分钟的加减
     public  static  final  int  SUB_MINUTE = Calendar.MINUTE;
  
     // 秒的加减
     public  static  final  int  SUB_SECOND = Calendar.SECOND;
  
     static  final  String dayNames[] = {  "星期日" "星期一" "星期二" "星期三" "星期四" ,
             "星期五" "星期六"  };
  
     @SuppressWarnings ( "unused" )
     private  static  final  SimpleDateFormat timeFormat =  new  SimpleDateFormat(
             "yyyy-MM-dd HH:mm:ss" );
  
     public  DateUtil() {
     }
  
     /**
      * 把符合日期格式的字符串转换为日期类型
      */
     public  static  java.util.Date stringtoDate(String dateStr, String format) {
         Date d =  null ;
         SimpleDateFormat formater =  new  SimpleDateFormat(format);
         try  {
             formater.setLenient( false );
             d = formater.parse(dateStr);
         catch  (Exception e) {
             // log.error(e);
             d =  null ;
         }
         return  d;
     }
  
     /**
      * 把符合日期格式的字符串转换为日期类型
      */
     public  static  java.util.Date stringtoDate(String dateStr, String format,
             ParsePosition pos) {
         Date d =  null ;
         SimpleDateFormat formater =  new  SimpleDateFormat(format);
         try  {
             formater.setLenient( false );
             d = formater.parse(dateStr, pos);
         catch  (Exception e) {
             d =  null ;
         }
         return  d;
     }
  
     /**
      * 把日期转换为字符串
      */
     public  static  String dateToString(java.util.Date date, String format) {
         String result =  "" ;
         SimpleDateFormat formater =  new  SimpleDateFormat(format);
         try  {
             result = formater.format(date);
         catch  (Exception e) {
             // log.error(e);
         }
         return  result;
     }
  
     /**
      * 获取当前时间的指定格式
      */
     public  static  String getCurrDate(String format) {
         return  dateToString( new  Date(), format);
     }
  
     public  static  String dateSub( int  dateKind, String dateStr,  int  amount) {
         Date date = stringtoDate(dateStr, FORMAT_ONE);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         calendar.add(dateKind, amount);
         return  dateToString(calendar.getTime(), FORMAT_ONE);
     }
  
     /**
      * 两个日期相减
      * @return 相减得到的秒数
      */
     public  static  long  timeSub(String firstTime, String secTime) {
         long  first = stringtoDate(firstTime, FORMAT_ONE).getTime();
         long  second = stringtoDate(secTime, FORMAT_ONE).getTime();
         return  (second - first) /  1000 ;
     }
  
     /**
      * 获得某月的天数
      */
     public  static  int  getDaysOfMonth(String year, String month) {
         int  days =  0 ;
         if  (month.equals( "1" ) || month.equals( "3" ) || month.equals( "5" )
                 || month.equals( "7" ) || month.equals( "8" ) || month.equals( "10" )
                 || month.equals( "12" )) {
             days =  31 ;
         else  if  (month.equals( "4" ) || month.equals( "6" ) || month.equals( "9" )
                 || month.equals( "11" )) {
             days =  30 ;
         else  {
             if  ((Integer.parseInt(year) %  4  ==  0  && Integer.parseInt(year) %  100  !=  0 )
                     || Integer.parseInt(year) %  400  ==  0 ) {
                 days =  29 ;
             else  {
                 days =  28 ;
             }
         }
  
         return  days;
     }
  
     /**
      * 获取某年某月的天数
      */
     public  static  int  getDaysOfMonth( int  year,  int  month) {
         Calendar calendar = Calendar.getInstance();
         calendar.set(year, month -  1 1 );
         return  calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
     }
  
     /**
      * 获得当前日期
      */
     public  static  int  getToday() {
         Calendar calendar = Calendar.getInstance();
         return  calendar.get(Calendar.DATE);
     }
  
     /**
      * 获得当前月份
      */
     public  static  int  getToMonth() {
         Calendar calendar = Calendar.getInstance();
         return  calendar.get(Calendar.MONTH) +  1 ;
     }
  
     /**
      * 获得当前年份
      */
     public  static  int  getToYear() {
         Calendar calendar = Calendar.getInstance();
         return  calendar.get(Calendar.YEAR);
     }
  
     /**
      * 返回日期的天
      */
     public  static  int  getDay(Date date) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         return  calendar.get(Calendar.DATE);
     }
  
     /**
      * 返回日期的年
      */
     public  static  int  getYear(Date date) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         return  calendar.get(Calendar.YEAR);
     }
  
     /**
      * 返回日期的月份,1-12
      */
     public  static  int  getMonth(Date date) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         return  calendar.get(Calendar.MONTH) +  1 ;
     }
  
     /**
      * 计算两个日期相差的天数,如果date2 > date1 返回正数,否则返回负数
      */
     public  static  long  dayDiff(Date date1, Date date2) {
         return  (date2.getTime() - date1.getTime()) /  86400000 ;
     }
  
     /**
      * 比较两个日期的年差
      */
     public  static  int  yearDiff(String before, String after) {
         Date beforeDay = stringtoDate(before, LONG_DATE_FORMAT);
         Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
         return  getYear(afterDay) - getYear(beforeDay);
     }
  
     /**
      * 比较指定日期与当前日期的差
      */
     public  static  int  yearDiffCurr(String after) {
         Date beforeDay =  new  Date();
         Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
         return  getYear(beforeDay) - getYear(afterDay);
     }
      
     /**
      * 比较指定日期与当前日期的差
      */
     public  static  long  dayDiffCurr(String before) {
         Date currDate = DateUtil.stringtoDate(currDay(), LONG_DATE_FORMAT);
         Date beforeDate = stringtoDate(before, LONG_DATE_FORMAT);
         return  (currDate.getTime() - beforeDate.getTime()) /  86400000 ;
  
     }
  
     /**
      * 获取每月的第一周
      */
     public  static  int  getFirstWeekdayOfMonth( int  year,  int  month) {
         Calendar c = Calendar.getInstance();
         c.setFirstDayOfWeek(Calendar.SATURDAY);  // 星期天为第一天
         c.set(year, month -  1 1 );
         return  c.get(Calendar.DAY_OF_WEEK);
     }
     /**
      * 获取每月的最后一周
      */
     public  static  int  getLastWeekdayOfMonth( int  year,  int  month) {
         Calendar c = Calendar.getInstance();
         c.setFirstDayOfWeek(Calendar.SATURDAY);  // 星期天为第一天
         c.set(year, month -  1 , getDaysOfMonth(year, month));
         return  c.get(Calendar.DAY_OF_WEEK);
     }
  
     /**
      * 获得当前日期字符串,格式"yyyy_MM_dd_HH_mm_ss"
     
      * @return
      */
     public  static  String getCurrent() {
         Calendar cal = Calendar.getInstance();
         cal.setTime( new  Date());
         int  year = cal.get(Calendar.YEAR);
         int  month = cal.get(Calendar.MONTH) +  1 ;
         int  day = cal.get(Calendar.DAY_OF_MONTH);
         int  hour = cal.get(Calendar.HOUR_OF_DAY);
         int  minute = cal.get(Calendar.MINUTE);
         int  second = cal.get(Calendar.SECOND);
         StringBuffer sb =  new  StringBuffer();
         sb.append(year).append( "_" ).append(StringUtil.addzero(month,  2 ))
                 .append( "_" ).append(StringUtil.addzero(day,  2 )).append( "_" )
                 .append(StringUtil.addzero(hour,  2 )).append( "_" ).append(
                         StringUtil.addzero(minute,  2 )).append( "_" ).append(
                         StringUtil.addzero(second,  2 ));
         return  sb.toString();
     }
  
     /**
      * 获得当前日期字符串,格式"yyyy-MM-dd HH:mm:ss"
     
      * @return
      */
     public  static  String getNow() {
         Calendar today = Calendar.getInstance();
         return  dateToString(today.getTime(), FORMAT_ONE);
     }
  
     
  
     /**
      * 判断日期是否有效,包括闰年的情况
     
      * @param date
      *          YYYY-mm-dd
      * @return
      */
     public  static  boolean  isDate(String date) {
         StringBuffer reg =  new  StringBuffer(
                 "^((\\d{2}(([02468][048])|([13579][26]))-?((((0?" );
         reg.append( "[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))" );
         reg.append( "|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|" );
         reg.append( "(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12" );
         reg.append( "35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))" );
         reg.append( "-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))" );
         reg.append( "-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[" );
         reg.append( "1-9])|(1[0-9])|(2[0-8]))))))" );
         Pattern p = Pattern.compile(reg.toString());
         return  p.matcher(date).matches();
     }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值