package julit.framework.common.util;
import java.math.BigDecimal; 
 import java.text.DateFormat; 
 import java.text.SimpleDateFormat; 
 import java.util.Calendar; 
 import java.util.Date; 
 import java.util.GregorianCalendar;public class DateUtil { 
 /** 
 * ORA标准时间格式 
 */ 
 private static final SimpleDateFormat ORA_DATE_TIME_FORMAT = new SimpleDateFormat( 
 “yyyyMMddHHmm”);
/**
 * 带时分秒的ORA标准时间格式
 */
private static final SimpleDateFormat ORA_DATE_TIME_EXTENDED_FORMAT = new SimpleDateFormat(
        "yyyyMMddHHmmss");

/**
 * 带时分秒的ORA标准时间格式
 */
private static final SimpleDateFormat ORA_DATE_FORMAT = new SimpleDateFormat( "yyyy-MM-dd");
private static final SimpleDateFormat ORA_DATE_FORMAT_MD = new SimpleDateFormat( "MM月dd号");
private static final SimpleDateFormat ORA_DATE_FORMAT_ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

private static final SimpleDateFormat ORA_DATE_FORMAT2 = new SimpleDateFormat(
        "yyyy/MM/dd");
private static final SimpleDateFormat ORA_DATE_FORMAT_2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
/**
 * 创建一个标准ORA时间格式的克隆
 *
 * @return 标准ORA时间格式的克隆
 */
private static synchronized DateFormat getOraDateTimeFormat() {
    SimpleDateFormat theDateTimeFormat = (SimpleDateFormat) ORA_DATE_TIME_FORMAT
            .clone();
    theDateTimeFormat.setLenient(false);
    return theDateTimeFormat;
}

public static String toOnlyDateFormat(Date d){
    try{
        return ORA_DATE_FORMAT.format(d);
    }catch(Exception ex){
        return "";
    }       
}
public static String toOnlyDateFormatMd(Date d){
    try{
        return ORA_DATE_FORMAT_MD.format(d);
    }catch(Exception ex){
        return "";
    }       
}

public static String toOnlyDateFormat_(Date d){
    try{
        return ORA_DATE_FORMAT_.format(d);
    }catch(Exception ex){
        return "";
    }       
}

public static String toOnlyDateFormat2(Date d){
    try{
        return ORA_DATE_FORMAT2.format(d);
    }catch(Exception ex){
        return "";
    }       
}
public static String toOnlyDateFormat_2(Date d){
    try{
        return ORA_DATE_FORMAT_2.format(d);
    }catch(Exception ex){
        return "";
    }       
} 

/**
 * 创建一个带分秒的ORA时间格式的克隆
 *
 * @return 标准ORA时间格式的克隆
 */
private static synchronized DateFormat getOraExtendDateTimeFormat() {
    SimpleDateFormat theDateTimeFormat = (SimpleDateFormat) ORA_DATE_TIME_EXTENDED_FORMAT
            .clone();
    theDateTimeFormat.setLenient(false);
    return theDateTimeFormat;
}

public static String getSystemCurrentYear(){
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    return String.valueOf(c.get(Calendar.YEAR));
}

public static String getSystemCurrentMonth(){
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    return String.valueOf(c.get(Calendar.MONTH)+1);
}

public static String getSystemCurrentDay(){
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    return String.valueOf(c.get(Calendar.DAY_OF_MONTH));
}

public static String getSystemCurrentYearLast2Bits(){
    String year = getSystemCurrentYear();
    return year.length()>2?year.substring(year.length()-2):year;
}

/**
 * 得到系统当前的日期 格式为YYYY-MM-DD
 * 
 * @return
 */
public static String getSystemCurrentDate() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    return doTransform(calendar.get(Calendar.YEAR), calendar
            .get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH));
}

/**
 * 得到下个月这个时候的系统的日期 格式为YYYY-MM-DD(当现在月份为12月时,此时这里的月份为13)
 * 
 * @return
 */
public static String getSystemCurrentDate_NextMonth() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    return doTransform(calendar.get(Calendar.YEAR), calendar
            .get(Calendar.MONTH) + 2, calendar.get(Calendar.DAY_OF_MONTH));
}

/**
 * 返回格式为YYYY-MM-DD
 * 
 * @param year
 *            年
 * @param month
 *            月
 * @param day
 *            日
 * @return
 */
private static String doTransform(int year, int month, int day) {
    StringBuffer result = new StringBuffer();
    result.append(String.valueOf(year)).append("-").append(
            month < 10 ? "0" + String.valueOf(month) : String
                    .valueOf(month)).append("-").append(
            day < 10 ? "0" + String.valueOf(day) : String.valueOf(day));
    return result.toString();
}

/**
 * 得到系统当前的日期和时间 格式为YYYY-MM-DD hh:mm:ss
 * 
 * @return
 */
public static final String getSystemCurrentDateTime() {
    Calendar newCalendar = Calendar.getInstance();
    newCalendar.setTimeInMillis(System.currentTimeMillis());
    int year = newCalendar.get(Calendar.YEAR);
    int month = newCalendar.get(Calendar.MONTH) + 1;
    int day = newCalendar.get(Calendar.DAY_OF_MONTH);
    int hour = newCalendar.get(Calendar.HOUR_OF_DAY);
    int minute = newCalendar.get(Calendar.MINUTE);
    int second = newCalendar.get(Calendar.SECOND);
    return doTransform(year, month, day, hour, minute, second);
}

/**
 * 得到系统当前的时间 格式为hh:mm:ss
 * @return
 */
public static final String getSystemCurrentTime() {
    return getSystemCurrentDateTime().substring(11, 19);
}

/**
 * 返回格式为YYYY-MM-DD hh:mm:ss
 * 
 * @param year
 *            年
 * @param month
 *            月
 * @param day
 *            日
 * @param hour
 *            小时
 * @param minute
 *            分钟
 * @param second
 *            秒
 * @return
 */
private static final String doTransform(int year, int month, int day,
        int hour, int minute, int second) {
    StringBuffer result = new StringBuffer();
    result.append(String.valueOf(year)).append("-")
    .append(month < 10 ? "0" + String.valueOf(month) : String.valueOf(month)).append("-")
    .append(day < 10 ? "0" + String.valueOf(day) : String.valueOf(day)).append(" ")
    .append(hour < 10 ? "0" + String.valueOf(hour) : String.valueOf(hour)).append(":")
    .append(minute < 10 ? "0" + String.valueOf(minute) : String.valueOf(minute)).append(":")
    .append(second < 10 ? "0" + String.valueOf(second) : String.valueOf(second));
    return result.toString();
}

/**
 * 获得昨天的日期
 * 
 * @return 指定日期的下一天 格式:YYYY-MM-DD
 */
public static synchronized String getDayBeforeToday() {
    Date date = new Date(System.currentTimeMillis());
    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
    gc.setTime(date);
    gc.add(Calendar.DATE, -1);
    return doTransform(toString(gc.getTime(),getOraDateTimeFormat()));
}

/**
 * 获得明天的日期
 * 
 * @return 指定日期的下一天 格式:YYYY-MM-DD
 */
public static synchronized String getDayAfterToday() {
    Date date = new Date(System.currentTimeMillis());
    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
    gc.setTime(date);
    gc.add(Calendar.DATE, 1);
    return doTransform(toString(gc.getTime(),getOraExtendDateTimeFormat())).substring(0,10);
}
/**
 * 获得明天的日期
 * 
 * @return 指定日期的下一天 格式:YYYY-MM-DD
 */
public static synchronized String getNextDay(String date) {
    Date date1 = toSimpleDate(date);
    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
    gc.setTime(date1);
    gc.add(Calendar.DATE, 1);
    return doTransform(toString(gc.getTime(),getOraExtendDateTimeFormat())).substring(0,10);
}    

/**
 * 获得以后几个月的日期
 * 
 * @return 指定日期的后面几个月 格式:YYYY-MM-DD
 */
public static synchronized Date getDayAfterMonth(int months){
    Date date = new Date(System.currentTimeMillis());
    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
    gc.setTime(date);
    gc.add(Calendar.MONTH, months);
    return gc.getTime();
}

/**
 * 返回格式为YYYY-MM-DD hh:mm:ss
 * @param date 输入格式为ORA标准时间格式
 * @return
 */
public static String doTransform(String date){
    StringBuffer buffer = new StringBuffer();
    buffer.append(date.substring(0,4));
    buffer.append("-");
    buffer.append(date.substring(4,6));
    buffer.append("-");
    buffer.append(date.substring(6,8));
    buffer.append(" ");
    buffer.append(date.substring(8,10));
    buffer.append(":");
    buffer.append(date.substring(10,12));
    buffer.append(":");
    buffer.append(date.substring(12,14));

    return buffer.toString();
}

/**
 * 将一个日期对象转换成为指定日期、时间格式的字符串。 如果日期对象为空,返回一个空字符串对象.
 * 
 * @param theDate
 *            要转换的日期对象
 * @param theDateFormat
 *            返回的日期字符串的格式
 * @return 转换结果
 */
public static synchronized String toString(Date theDate,
        DateFormat theDateFormat) {
    if (theDate == null) {
        return "";
    } else {
        return theDateFormat.format(theDate);
    }
}

/**
 * 将Date类型转换后返回本系统默认的日期格式 YYYY-MM-DD hh:mm:ss
 * @param theDate
 * @return
 */
public static synchronized String toDefaultString(Date theDate){
    if(theDate == null){
       return "";    
    }
    return  doTransform(toString(theDate,getOraExtendDateTimeFormat()));
}

/**
 * 将输入格式为2004-8-13 12:31:22类型的字符串转换为标准的Date类型
 * @param dateStr 
 * @return
 */
public static synchronized Date toDate(String dateStr){
    String[] list0 = dateStr.split(" ");
    String date = list0[0];
    String time = list0[1];
    String[] list1 = date.split("-");
    int year = new Integer(list1[0]).intValue();
    int month = new Integer(list1[1]).intValue();
    int day = new Integer(list1[2]).intValue();
    String[] list2 = time.split(":");
    int hour = new Integer(list2[0]).intValue();
    int min = new Integer(list2[1]).intValue();
    int second = new Integer(list2[2]).intValue();
    Calendar cale =  Calendar.getInstance();
    cale.set(year,month-1,day,hour,min,second);
    return cale.getTime();    
}

/**
 * 将输入格式为2004-8-13类型的字符串转换为标准的Date类型
 * @param dateStr 
 * @return
 */
public static synchronized Date toSimpleDate(String dateStr){
    try{
        String[] list = dateStr.split("-");
        int year = new Integer(list[0]).intValue();
        int month = new Integer(list[1]).intValue();
        int day = new Integer(list[2]).intValue();
        Calendar cale =  Calendar.getInstance();
        cale.set(year,month-1,day,0,0,0);
        return cale.getTime();
    }catch(Exception ex){
        return null;
    }
}

public static synchronized Date toSimpleDate(String year, String month, String date){
    try{
        String str = year + "-" +
        Converter.padding(month, 2, '0', true) + "-" +
        Converter.padding(date, 2, '0', true);
        return toSimpleDate(str);
    }catch(Exception ex){
        return null;
    }
}

/**
 * 将输入格式为2004-8-13,2004-10-8类型的字符串转换为标准的Date类型,这种Date类型
 * 对应的日期格式为YYYY-MM-DD 00:00:00,代表一天的开始时刻
 * @param dateStr 
 * @return
 */
public static synchronized Date toDayStartDate(String dateStr){
    String[] list = dateStr.split("-");
    int year = new Integer(list[0]).intValue();
    int month = new Integer(list[1]).intValue();
    int day = new Integer(list[2]).intValue();
    Calendar cale =  Calendar.getInstance();
    cale.set(year,month-1,day,0,0,0);
    return cale.getTime();

}

/**
 * 将输入格式为2004-8-13,2004-10-8类型的字符串转换为标准的Date类型,这种Date类型
 * 对应的日期格式为YYYY-MM-DD 23:59:59,代表一天的结束时刻
 * @param dateStr 输入格式:2004-8-13,2004-10-8
 * @return
 */
public static synchronized Date toDayEndDate(String dateStr){
    String[] list = dateStr.split("-");
    int year = new Integer(list[0]).intValue();
    int month = new Integer(list[1]).intValue();
    int day = new Integer(list[2]).intValue();
    Calendar cale =  Calendar.getInstance();
    cale.set(year,month-1,day,23,59,59);
    return cale.getTime();

}
public static synchronized String compareTwoDate(Date date1,Date date2){ 
 Calendar calendar = Calendar.getInstance(); 
 calendar.setTime(date1); 
 //GregorianCalendar c1 = new GregorianCalendar(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND)); 
 Calendar calendar1 = Calendar.getInstance(); 
 calendar1.setTime(date2);//GregorianCalendar c2 = new GregorianCalendar(calendar1.get(Calendar.YEAR),calendar1.get(Calendar.MONTH),calendar1.get(Calendar.DAY_OF_MONTH),calendar1.get(Calendar.HOUR),calendar1.get(Calendar.MINUTE),calendar1.get(Calendar.SECOND));
   double timeLong = calendar1.getTimeInMillis()- calendar.getTimeInMillis();
   //double timeLong=c2.getTimeInMillis()-c1.getTimeInMillis();
   int hourNum=(int)(timeLong/1000/3600);
   int minuteNum = (int)((timeLong%(1000*3600))/1000/60);
   int secondNum = (int)(((timeLong%(1000*3600))%(1000*60))/1000);
   String hourStr="";
   if(hourNum<10){
       hourStr="0"+new Integer(hourNum).toString();
   }else{
       hourStr= new Integer(hourNum).toString();
   }
   String minuteStr="";
   if(minuteNum<10){
       minuteStr="0"+new Integer(minuteNum).toString();
   }else{
       minuteStr=new Integer(minuteNum).toString();
   }
   String secondStr="";
   if(secondNum<10){
       secondStr="0"+new Integer(secondNum).toString();
   }else{
       secondStr=new Integer(secondNum).toString();
   }       
   String time = hourStr+":"+minuteStr+":"+secondStr;
   return time;} 
 public static synchronized double compareDate(Date date1,Date date2){ 
 Calendar calendar = Calendar.getInstance(); 
 calendar.setTime(date1); 
 //GregorianCalendar c1 = new GregorianCalendar(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND)); 
 Calendar calendar1 = Calendar.getInstance(); 
 calendar1.setTime(date2); 
 //GregorianCalendar c2 = new GregorianCalendar(calendar1.get(Calendar.YEAR),calendar1.get(Calendar.MONTH),calendar1.get(Calendar.DAY_OF_MONTH),calendar1.get(Calendar.HOUR),calendar1.get(Calendar.MINUTE),calendar1.get(Calendar.SECOND)); 
 //double timeLong=c2.getTimeInMillis()-c1.getTimeInMillis(); 
 double timeLong = calendar1.getTimeInMillis()- calendar.getTimeInMillis(); 
 return timeLong; 
 }/** 
 * 两个日期date1与date2比较,得到(date2-date1)的小时差 
 * @param date1 
 * @param date2 
 * @return 
 */ 
 public static synchronized int getTwoDateHours(Date date1,Date date2){ 
 Calendar calendar = Calendar.getInstance(); 
 calendar.setTime(date1); 
 //GregorianCalendar c1 = new GregorianCalendar(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND)); 
 Calendar calendar1 = Calendar.getInstance(); 
 calendar1.setTime(date2); 
 //GregorianCalendar c2 = new GregorianCalendar(calendar1.get(Calendar.YEAR),calendar1.get(Calendar.MONTH),calendar1.get(Calendar.DAY_OF_MONTH),calendar1.get(Calendar.HOUR),calendar1.get(Calendar.MINUTE),calendar1.get(Calendar.SECOND)); 
 //double timeLong=c2.getTimeInMillis()-c1.getTimeInMillis(); 
 double timeLong = calendar1.getTimeInMillis()- calendar.getTimeInMillis(); 
 return new Double(timeLong/1000/3600).intValue(); 
 }/** 
 * 两个日期date1与date2比较,得到(date2-date1)的日期差 
 * @param date1 
 * @param date2 
 * @return 
 */ 
 public static synchronized int getTwoDateDays(Date date1,Date date2){ 
 Calendar calendar = Calendar.getInstance(); 
 calendar.setTime(date1); 
 //GregorianCalendar c1 = new GregorianCalendar(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND)); 
 Calendar calendar1 = Calendar.getInstance(); 
 calendar1.setTime(date2); 
 //GregorianCalendar c2 = new GregorianCalendar(calendar1.get(Calendar.YEAR),calendar1.get(Calendar.MONTH),calendar1.get(Calendar.DAY_OF_MONTH),calendar1.get(Calendar.HOUR),calendar1.get(Calendar.MINUTE),calendar1.get(Calendar.SECOND)); 
 //double timeLong=c2.getTimeInMillis()-c1.getTimeInMillis(); 
 double timeLong = calendar1.getTimeInMillis()- calendar.getTimeInMillis(); 
 //2013.12.09yang这里将两个日期比较的值四舍五入一下,不然两个值 
 String numStr = String.valueOf(new BigDecimal(String.valueOf(timeLong/1000/3600/24)).setScale(0, BigDecimal.ROUND_HALF_UP)); 
 //System.out.println(numStr); 
 return new Integer(numStr).intValue(); 
 } 
 /** 
 * 将两个scorm时间相加 
 * @param scormTime1 scorm时间,格式为00:00:00(1..2).0(1..3) 
 * @param scormTime2 scorm时间,格式为00:00:00(1..2).0(1..3) 
 * @return 
 */ 
 public static synchronized String addTwoScormTime(String scormTime1,String scormTime2){ 
 int dotIndex1 = scormTime1.indexOf(“.”); 
 int hh1 = Integer.parseInt(scormTime1.substring(0,2)); 
 int mm1 = Integer.parseInt(scormTime1.substring(3,5)); 
 int ss1 = Integer.parseInt(scormTime1.substring(6,dotIndex1)); 
 int ms1 = Integer.parseInt(scormTime1.substring(dotIndex1 + 1,scormTime1.length()));int dotIndex2 = scormTime2.indexOf(".");
    int hh2 = Integer.parseInt(scormTime2.substring(0,2));
    int mm2 = Integer.parseInt(scormTime2.substring(3,5));
    int ss2 = Integer.parseInt(scormTime2.substring(6,dotIndex2));
    int ms2 = Integer.parseInt(scormTime2.substring(dotIndex1 + 1,scormTime2.length()));

    int hh = 0; 
    int mm = 0;
    int ss = 0;
    int ms = 0;

    if(ms1+ms2 >= 1000){
        ss = 1;
        ms = ms1+ms2-1000;
    }else{
        ms = ms1+ms2;
    }
    if(ss1+ss2+ss >= 60){
        mm = 1;
        ss = ss1+ss2+ss-60;
    }else{
        ss = ss1+ss2+ss;
    }
    if(mm1+mm2+mm>=60){
        hh = 1;
        hh = mm1+mm2+mm-60;
    }
    hh = hh + hh1 + hh2;

    StringBuffer sb = new StringBuffer();
    if(hh<10){
       sb.append("0").append(hh);    
    }else{
       sb.append(hh);    
    }
    sb.append(":");
    if(mm<10){
       sb.append("0").append(mm);    
    }else{
       sb.append(mm);    
    }
    sb.append(":");
    if(ss<10){
       sb.append("0").append(ss);  
    }else{
       sb.append(ss);     
    }
    sb.append(".");
    if(ms<10){
       sb.append(ms).append("00");
    }else if(ms<100){
       sb.append(ms).append("0");    
    }else{
       sb.append(ms);  
    }
    return sb.toString();
}

/**
 * 根据timeType返回当前日期与传入日期的差值(当前日期减传入日期)
 * 当要求返回月份的时候,date的日期必须和当前的日期相等,
 * 否则返回0(例如:2003-2-23 和 2004-6-12由于23号和12号不是同一天,固返回0,
 *          2003-2-23 和 2005-6-23 则需计算相差的月份,包括年,此例应返回28(个月)。
 *          2003-2-23 和 2001-6-23 也需计算相差的月份,包括年,此例应返回-20(个月))
 * 
 * @param date 要与当前日期比较的日期
 * @param timeType 0代表返回两个日期相差月数,1代表返回两个日期相差天数
 * 
 * @return 根据timeType返回当前日期与传入日期的差值
 */
public static int CompareDateWithNow(Date date,int timeType){
    Date now = Calendar.getInstance().getTime();

    Calendar calendarNow=Calendar.getInstance();
    calendarNow.setTime(now);
    calendarNow.set(Calendar.HOUR,0);
    calendarNow.set(Calendar.MINUTE,0);
    calendarNow.set(Calendar.SECOND,0);
    //System.out.println("calendarNow "+calendarNow.getTime());

    Calendar calendarPara=Calendar.getInstance();
    calendarPara.setTime(date);
    calendarPara.set(Calendar.HOUR,0);
    calendarPara.set(Calendar.MINUTE,0);
    calendarPara.set(Calendar.SECOND,0);
    //System.out.println("calendarPara "+calendarPara.getTime());

    float nowTime=now.getTime();
    float dateTime=date.getTime();

    if(timeType==0){
        if(calendarNow.get(Calendar.DAY_OF_YEAR)==calendarPara.get(Calendar.DAY_OF_YEAR))
            return 0;
        return (calendarNow.get(Calendar.YEAR)-calendarPara.get(Calendar.YEAR))*12+calendarNow.get(Calendar.MONTH)-calendarPara.get(Calendar.MONTH);
    }
    else{
        float result=nowTime-dateTime;
        float day=24*60*60*1000;
        //System.out.println("day "+day);
        result=(result>0)?result:-result;
        //System.out.println(result);
        result=result/day;
        Float resultFloat=new Float(result);
        float fraction=result-resultFloat.intValue();
        if(fraction>0.5){
            return resultFloat.intValue()+1;
        }else{
            return resultFloat.intValue();
        }                               
    }
}

public static boolean isSameDate(Date d1, Date d2){
    if(d1==null || d2==null)return false;
    return d1.getYear()==d2.getYear() &&
            d1.getMonth()==d2.getMonth() &&
            d1.getDate()==d2.getDate();
}

public static boolean lessOrEqual(Date d1, Date d2){
    Calendar c1 = Calendar.getInstance();
    c1.setTime(d1);
    Calendar c2 = Calendar.getInstance();
    c2.setTime(d2);
    if( c1.before(c2)){
        return true;
    }else{
        return isSameDate(d1, d2);
    }
}

public static boolean less(Date d1, Date d2){
    Calendar c1 = Calendar.getInstance();
    c1.setTime(d1);
    Calendar c2 = Calendar.getInstance();
    c2.setTime(d2);
    if( c1.before(c2)){
        return true;
    }else{
        return false;
    }
}

public static String addDate(String date, int cnt){
    Calendar c = Calendar.getInstance();
    c.setTime(DateUtil.toSimpleDate(date));
    c.add(Calendar.DATE, cnt);
    return DateUtil.toOnlyDateFormat(c.getTime());
}

public static String getYear(Date d){
    return d==null?"":String.valueOf(1900+d.getYear());
}

public static String getMonth(Date d){
    return d==null?"":String.valueOf(d.getMonth()+1);
}

public static String getDate(Date d){
    return d==null?"":String.valueOf(d.getDate());
}

public static String getYear(String d){
    return getYear(DateUtil.toSimpleDate(d));
}

public static String getMonth(String d){
    return getMonth(DateUtil.toSimpleDate(d));
}

public static String getDate(String d){
    return getDate(DateUtil.toSimpleDate(d));
}

public static int getDayCountInMonth(Date d){
    if(d==null)return 0;
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    return c.getActualMaximum(Calendar.DAY_OF_MONTH);
}

//  比较两个日期字符串的相差天数,如:2009-07-01与2009-07-10 或 2009/07/01与2009/07/10
public static int compareDateStr(String date1, String date2){
    if(date1.indexOf("/")!=-1){
        date1 = date1.replaceAll("/","-");
    }
    if(date2.indexOf("/")!=-1){
        date2 = date2.replaceAll("/","-");
    }
    return getTwoDateDays(toSimpleDate(date2),toSimpleDate(date1));
}

/**
 * 给定一个普通日期,返回当月最后一天
 * @param monthdate
 * @return
 */
public static String getMonthLastDate(String monthdate){
    String curmonth = monthdate.substring(5,7);
    String today = monthdate;
    while(true){
        String nextday = DateUtil.addDate(today,1);
        if(!nextday.substring(5,7).equals(curmonth)){
            return today;
        }
        today = nextday;
    }
}

/**
 * 获得下一个月
 * @param yyyyMM
 * @return
 */
public static String getNextMonthStr(String yyyyMM){
    int firsty = Integer.parseInt(yyyyMM.substring(0, 4));
    int firstm = Integer.parseInt(yyyyMM.substring(4));
    if(firstm==12){
        firstm=1;
        firsty++;
    }else{
        firstm++;
    }
    return String.valueOf(firsty) + Converter.padding(String.valueOf(firstm),2,'0',true);
}

public static String getWeekStr(Date date1){
    String [] strs = {"周日","周一","周二","周三","周四","周五","周六"};
    Calendar c1 = Calendar.getInstance();
    c1.setTime(date1);
    int w = c1.get(Calendar.DAY_OF_WEEK);
    //System.out.println("www="+w);
    return strs[w-1];
}

/**
 * 获得一个月所需要的天数
 */
public static String[] getDays(int year,int month){
    String days[]=new String[42]; 
    for(int i=0;i<42;i++) 
     { 
      days[i]=""; 
     }  
    Calendar thisMonth=Calendar.getInstance(); 
      thisMonth.set(Calendar.MONTH,month-1); 
      thisMonth.set(Calendar.YEAR,year); 
     String years=String.valueOf(thisMonth.get(Calendar.YEAR)); 
     String months=String.valueOf(thisMonth.get(Calendar.MONTH)); 
     thisMonth.setFirstDayOfWeek(Calendar.SUNDAY); 
     thisMonth.set(Calendar.DAY_OF_MONTH,1); 
     int firstIndex=thisMonth.get(Calendar.DAY_OF_WEEK)-1; 
     int maxIndex=thisMonth.getActualMaximum(Calendar.DAY_OF_MONTH); 
     for(int i=0;i<maxIndex;i++) 
      { 
       days[firstIndex+i]=String.valueOf(i+1); 
      } 
     return days;
}
/**
 * 获取当前月份
 */
public static String getMMDD(String YYYYMMDD){
    String  MM = YYYYMMDD.substring(5, 7);
    String  DD = YYYYMMDD.substring(8);
    return MM+DD;
}
int dotIndex2 = scormTime2.indexOf(".");
    int hh2 = Integer.parseInt(scormTime2.substring(0,2));
    int mm2 = Integer.parseInt(scormTime2.substring(3,5));
    int ss2 = Integer.parseInt(scormTime2.substring(6,dotIndex2));
    int ms2 = Integer.parseInt(scormTime2.substring(dotIndex1 + 1,scormTime2.length()));

    int hh = 0; 
    int mm = 0;
    int ss = 0;
    int ms = 0;

    if(ms1+ms2 >= 1000){
        ss = 1;
        ms = ms1+ms2-1000;
    }else{
        ms = ms1+ms2;
    }
    if(ss1+ss2+ss >= 60){
        mm = 1;
        ss = ss1+ss2+ss-60;
    }else{
        ss = ss1+ss2+ss;
    }
    if(mm1+mm2+mm>=60){
        hh = 1;
        hh = mm1+mm2+mm-60;
    }
    hh = hh + hh1 + hh2;

    StringBuffer sb = new StringBuffer();
    if(hh<10){
       sb.append("0").append(hh);    
    }else{
       sb.append(hh);    
    }
    sb.append(":");
    if(mm<10){
       sb.append("0").append(mm);    
    }else{
       sb.append(mm);    
    }
    sb.append(":");
    if(ss<10){
       sb.append("0").append(ss);  
    }else{
       sb.append(ss);     
    }
    sb.append(".");
    if(ms<10){
       sb.append(ms).append("00");
    }else if(ms<100){
       sb.append(ms).append("0");    
    }else{
       sb.append(ms);  
    }
    return sb.toString();
}

/**
 * 根据timeType返回当前日期与传入日期的差值(当前日期减传入日期)
 * 当要求返回月份的时候,date的日期必须和当前的日期相等,
 * 否则返回0(例如:2003-2-23 和 2004-6-12由于23号和12号不是同一天,固返回0,
 *          2003-2-23 和 2005-6-23 则需计算相差的月份,包括年,此例应返回28(个月)。
 *          2003-2-23 和 2001-6-23 也需计算相差的月份,包括年,此例应返回-20(个月))
 * 
 * @param date 要与当前日期比较的日期
 * @param timeType 0代表返回两个日期相差月数,1代表返回两个日期相差天数
 * 
 * @return 根据timeType返回当前日期与传入日期的差值
 */
public static int CompareDateWithNow(Date date,int timeType){
    Date now = Calendar.getInstance().getTime();

    Calendar calendarNow=Calendar.getInstance();
    calendarNow.setTime(now);
    calendarNow.set(Calendar.HOUR,0);
    calendarNow.set(Calendar.MINUTE,0);
    calendarNow.set(Calendar.SECOND,0);
    //System.out.println("calendarNow "+calendarNow.getTime());

    Calendar calendarPara=Calendar.getInstance();
    calendarPara.setTime(date);
    calendarPara.set(Calendar.HOUR,0);
    calendarPara.set(Calendar.MINUTE,0);
    calendarPara.set(Calendar.SECOND,0);
    //System.out.println("calendarPara "+calendarPara.getTime());

    float nowTime=now.getTime();
    float dateTime=date.getTime();

    if(timeType==0){
        if(calendarNow.get(Calendar.DAY_OF_YEAR)==calendarPara.get(Calendar.DAY_OF_YEAR))
            return 0;
        return (calendarNow.get(Calendar.YEAR)-calendarPara.get(Calendar.YEAR))*12+calendarNow.get(Calendar.MONTH)-calendarPara.get(Calendar.MONTH);
    }
    else{
        float result=nowTime-dateTime;
        float day=24*60*60*1000;
        //System.out.println("day "+day);
        result=(result>0)?result:-result;
        //System.out.println(result);
        result=result/day;
        Float resultFloat=new Float(result);
        float fraction=result-resultFloat.intValue();
        if(fraction>0.5){
            return resultFloat.intValue()+1;
        }else{
            return resultFloat.intValue();
        }                               
    }
}

public static boolean isSameDate(Date d1, Date d2){
    if(d1==null || d2==null)return false;
    return d1.getYear()==d2.getYear() &&
            d1.getMonth()==d2.getMonth() &&
            d1.getDate()==d2.getDate();
}

public static boolean lessOrEqual(Date d1, Date d2){
    Calendar c1 = Calendar.getInstance();
    c1.setTime(d1);
    Calendar c2 = Calendar.getInstance();
    c2.setTime(d2);
    if( c1.before(c2)){
        return true;
    }else{
        return isSameDate(d1, d2);
    }
}

public static boolean less(Date d1, Date d2){
    Calendar c1 = Calendar.getInstance();
    c1.setTime(d1);
    Calendar c2 = Calendar.getInstance();
    c2.setTime(d2);
    if( c1.before(c2)){
        return true;
    }else{
        return false;
    }
}

public static String addDate(String date, int cnt){
    Calendar c = Calendar.getInstance();
    c.setTime(DateUtil.toSimpleDate(date));
    c.add(Calendar.DATE, cnt);
    return DateUtil.toOnlyDateFormat(c.getTime());
}

public static String getYear(Date d){
    return d==null?"":String.valueOf(1900+d.getYear());
}

public static String getMonth(Date d){
    return d==null?"":String.valueOf(d.getMonth()+1);
}

public static String getDate(Date d){
    return d==null?"":String.valueOf(d.getDate());
}

public static String getYear(String d){
    return getYear(DateUtil.toSimpleDate(d));
}

public static String getMonth(String d){
    return getMonth(DateUtil.toSimpleDate(d));
}

public static String getDate(String d){
    return getDate(DateUtil.toSimpleDate(d));
}

public static int getDayCountInMonth(Date d){
    if(d==null)return 0;
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    return c.getActualMaximum(Calendar.DAY_OF_MONTH);
}

//  比较两个日期字符串的相差天数,如:2009-07-01与2009-07-10 或 2009/07/01与2009/07/10
public static int compareDateStr(String date1, String date2){
    if(date1.indexOf("/")!=-1){
        date1 = date1.replaceAll("/","-");
    }
    if(date2.indexOf("/")!=-1){
        date2 = date2.replaceAll("/","-");
    }
    return getTwoDateDays(toSimpleDate(date2),toSimpleDate(date1));
}

/**
 * 给定一个普通日期,返回当月最后一天
 * @param monthdate
 * @return
 */
public static String getMonthLastDate(String monthdate){
    String curmonth = monthdate.substring(5,7);
    String today = monthdate;
    while(true){
        String nextday = DateUtil.addDate(today,1);
        if(!nextday.substring(5,7).equals(curmonth)){
            return today;
        }
        today = nextday;
    }
}

/**
 * 获得下一个月
 * @param yyyyMM
 * @return
 */
public static String getNextMonthStr(String yyyyMM){
    int firsty = Integer.parseInt(yyyyMM.substring(0, 4));
    int firstm = Integer.parseInt(yyyyMM.substring(4));
    if(firstm==12){
        firstm=1;
        firsty++;
    }else{
        firstm++;
    }
    return String.valueOf(firsty) + Converter.padding(String.valueOf(firstm),2,'0',true);
}

public static String getWeekStr(Date date1){
    String [] strs = {"周日","周一","周二","周三","周四","周五","周六"};
    Calendar c1 = Calendar.getInstance();
    c1.setTime(date1);
    int w = c1.get(Calendar.DAY_OF_WEEK);
    //System.out.println("www="+w);
    return strs[w-1];
}

/**
 * 获得一个月所需要的天数
 */
public static String[] getDays(int year,int month){
    String days[]=new String[42]; 
    for(int i=0;i<42;i++) 
     { 
      days[i]=""; 
     }  
    Calendar thisMonth=Calendar.getInstance(); 
      thisMonth.set(Calendar.MONTH,month-1); 
      thisMonth.set(Calendar.YEAR,year); 
     String years=String.valueOf(thisMonth.get(Calendar.YEAR)); 
     String months=String.valueOf(thisMonth.get(Calendar.MONTH)); 
     thisMonth.setFirstDayOfWeek(Calendar.SUNDAY); 
     thisMonth.set(Calendar.DAY_OF_MONTH,1); 
     int firstIndex=thisMonth.get(Calendar.DAY_OF_WEEK)-1; 
     int maxIndex=thisMonth.getActualMaximum(Calendar.DAY_OF_MONTH); 
     for(int i=0;i<maxIndex;i++) 
      { 
       days[firstIndex+i]=String.valueOf(i+1); 
      } 
     return days;
}
/**
 * 获取当前月份
 */
public static String getMMDD(String YYYYMMDD){
    String  MM = YYYYMMDD.substring(5, 7);
    String  DD = YYYYMMDD.substring(8);
    return MM+DD;
}

}