Android Calendar的工具类

/**
 * 时间工具类
 * 1、String类型的日期时间转化为Date类型 getDateByFormat("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 2、获取Date偏移之后的Date getDateByOffset(date,Calendar.DATE,1);
 * 3、获取字符串日期时间的字符串(可偏移) getStringByOffset("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss",Calendar.DATE,1);
 * 4、Date类型转化为String类型(可偏移)  getStringByOffset(date,"yyyy-MM-dd HH:mm:ss",Calendar.DATE,1);
 * 5、Date类型转化为String类型 getStringByFormat((date,"yyyy-MM-dd HH:mm:ss");
 * 6、获取指定日期时间的字符串,用于导出想要的格式 getStringByFormat("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 7、获取milliseconds表示的日期时间的字符串 getStringByFormat(1470816365,"yyyy-MM-dd HH:mm:ss");
 * 8、获取表示当前日期时间的字符串 getCurrentDate("yyyy-MM-dd HH:mm:ss");
 * 9、计算两个日期所差的天数 getOffectDay(1470816365,1470816415); or getOffectDay(startDate,endDate)
 * 10、计算两个日期所差的小时数 getOffectHour(1470816365,1470816415);
 * 11、计算两个日期所差的分钟数 getOffectMinutes(1470816365,1470816415);
 * 12、获取本周一 getFirstDayOfWeek("2016-04-15 12:20:11");
 * 13、获取本周日 getLastDayOfWeek("2016-04-15 12:20:11");
 * 14、获取本周的某一天 getDayOfWeek("2016-04-15 12:20:11",Calendar.DATE);
 * 15、获取本月第一天 getFirstDayOfMonth("2016-04-15 12:20:11");
 * 16、获取本月最后一天 getLastDayOfMonth("2016-04-15 12:20:11");
 * 17、获取表示当前日期的0点时间毫秒数 getFirstTimeOfDay();
 * 18、获取表示当前日期24点时间毫秒数 getLastTimeOfDay();
 * 19、判断是否是闰年 isLeapYear(2014);
 * 20、根据时间返回格式化后的时间的描述 formatDateStr2Desc2("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 21、以友好的方式显示时间  formatDateStr2Desc("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 22、取指定日期为星期几 getWeekNumber("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 23、根据给定的日期判断是否为上下午 getTimeQuantum("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 24、根据给定的毫秒数算得时间的描述 getTimeDescription(1470816365);
 * 25、将Calendar转成字符串 calendarConvertString(calendar,"yyyy-MM-dd HH:mm:ss");
 * 26、将字符串转成Calendar stringConvertCalendar("2016-04-15 12:20:11","yyyy-MM-dd HH:mm:ss");
 * 27、比较2个时间的大小 calendarCompare(calendar1,calendar2);
 * 28、得到当前时间的随机数 getCurRandomDate();
 * 29、某年某月有多少天 getDaysInMonth(2016,5);
 * 30、某年某月的第一天是周几 getFirstWeekDayInMonth(2016,5);
 * 31、得到2个时间戳之间相差的 天 时 分 秒 getDate(1470816365,1470816415);
 * 32、阳历节日 calendarFestival(calendar);
 * 33、阴历节日 lunarHoliday(calendar);
 * Created by slantech on 2018/04/28 13:40
 */
public class CalendarTool {

    /**
     * 时间日期格式化到年月日时分秒.
     */
    public static final String dateFormatYMDHMS = "yyyy-MM-dd HH:mm:ss";

    public static final String dateFormatYMDHMSSSS = "yyyy-MM-dd HH:mm:ss:SSS";
    /**
     * 时间日期格式化到年月日.
     */
    public static final String dateFormatYMD = "yyyy-MM-dd";
    /**
     * 时间日期格式化到年月.
     */
    public static final String dateFormatYM = "yyyy-MM";
    /**
     * 时间日期格式化到年.
     */
    public static final String dateFormatY = "yyyy";
    /**
     * 时间日期格式化到年月日时分.
     */
    public static final String dateFormatYMDHM = "yyyy-MM-dd HH:mm";
    /**
     * 时间日期格式化到月日.
     */
    public static final String dateFormatMD = "MM/dd";
    /**
     * 时分秒.
     */
    public static final String dateFormatHMS = "HH:mm:ss";
    /**
     * 时分.
     */
    public static final String dateFormatHM = "HH:mm";
    /**
     * 上午.
     */
    public static final String AM = "AM";
    /**
     * 下午.
     */
    public static final String PM = "PM";

    static final String[] solarTerms = {"立春", "雨水", "惊蛰", "春分", "清明", "谷雨",
            "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露",
            "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒"};

    static final int[][] solarTermsDays = {{2, 4}, {2, 19}, {3, 6},
            {3, 21}, {4, 5}, {4, 20}, {5, 6}, {5, 21}, {6, 6},
            {6, 21}, {7, 7}, {7, 23}, {8, 8}, {8, 23}, {9, 8},
            {9, 23}, {10, 8}, {10, 23}, {11, 7}, {11, 22}, {12, 7},
            {12, 22}, {1, 6}, {1, 20}};

    static final String[] festivals = {"元旦", "情人", "女生", "妇女", "植树", "愚人",
            "劳动", "青年", "儿童", "建军", "教师", "国庆", "万圣", "光棍", "平安", "圣诞"};

    static final int[][] festivalsDays = {{1, 1}, {2, 14}, {3, 7},
            {3, 8}, {3, 12}, {4, 1}, {5, 1}, {5, 4}, {6, 1},
            {8, 1}, {9, 10}, {10, 1}, {10, 31}, {11, 11}, {12, 24},
            {12, 25}};

    static final String[] chineseFestivals = {"春节", "元宵", "花朝", "上巳节", "端午",
            "七夕", "中元", "中秋", "重阳", "祭祖", "下元", "腊八"};

    static final int[][] chineseFestivalsDays = {{1, 1}, {1, 15},
            {2, 12}, {3, 3}, {5, 5}, {7, 7}, {7, 15}, {8, 15},
            {9, 9}, {10, 1}, {10, 15}, {12, 8}};


    /**
     * 是否是大于当前日期 以天判断
     *
     * @param day
     * @return
     */
    public static boolean isFutureOfDay(String day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(getDateByFormat(day, "yyyy-MM-dd"));
        Calendar current = Calendar.getInstance();
        current.setTime(getDateByFormat(getCurrentDate("yyyy-MM-dd"), "yyyy-MM-dd"));
        return calendar.getTimeInMillis() - current.getTimeInMillis() >= 0;
    }

    /**
     * 是否是大于当前日期的天数 以天判断
     *
     * @param day
     * @return
     */
    public static boolean isFutureOfDay(String day, int fday) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(getDateByFormat(day, "yyyy-MM-dd"));
        Calendar current = Calendar.getInstance();
        current.setTime(getDateByFormat(getCurrentDate("yyyy-MM-dd"), "yyyy-MM-dd"));
        long size = calendar.getTimeInMillis() - current.getTimeInMillis();
        return size >= fday * 24 * 60 * 60*1000;
    }


    /**
     * 判断时间是否超过当前时间
     *
     * @return
     */
    public static boolean DateIsCurrent(String time) {
        boolean is = false;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            ULogger.e(e);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        is = calendar.getTimeInMillis() > System.currentTimeMillis();
        return is;
    }


    /**
     * String 类型转化为long类型
     *
     * @param date
     * @return
     */
    public static long getStringToLongDate(String date) {
        Calendar c = Calendar.getInstance();
        c.setTime(getDateByFormat(date, "yyyy-MM-dd"));
        return c.getTimeInMillis();
    }

    /**
     * String 类型转化为long类型
     *
     * @param date
     * @param format
     * @return
     */
    public static long getStringToLongDate(String date, String format) {
        Calendar c = Calendar.getInstance();
        c.setTime(getDateByFormat(date, format));
        return c.getTimeInMillis();
    }

    /**
     * String类型的日期时间转化为Date类型.
     *
     * @param strDate String形式的日期时间
     * @param format  格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @return Date Date类型日期时间
     */
    public static Date getDateByFormat(String strDate, String format) {
        SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
        Date date = null;
        try {
            date = mSimpleDateFormat.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取Date偏移之后的Date.
     *
     * @param date          日期时间
     * @param calendarField Calendar属性,对应offset的值, 如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
     * @param offset        偏移(值大于0,表示+,值小于0,表示-)
     * @return Date 偏移之后的日期时间
     */
    public Date getDateByOffset(Date date, int calendarField, int offset) {
        Calendar c = new GregorianCalendar();
        try {
            c.setTime(date);
            c.add(calendarField, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return c.getTime();
    }

    /**
     * 获取字符串日期时间的字符串(可偏移).
     *
     * @param strDate       String形式的日期时间
     * @param format        格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @param calendarField Calendar属性,对应offset的值,
     *                      如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
     * @param offset        偏移(值大于0,表示+,值小于0,表示-)
     * @return String String类型的日期时间
     */
    public static String getStringByOffset(String strDate, String format, int calendarField, int offset) {
        String mDateTime = null;
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            c.setTime(mSimpleDateFormat.parse(strDate));
            c.add(calendarField, offset);
            mDateTime = mSimpleDateFormat.format(c.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return mDateTime;
    }

    /**
     * Date类型转化为String类型(可偏移).
     *
     * @param date          the date
     * @param format        the format
     * @param calendarField the calendar field
     * @param offset        the offset
     * @return String String类型日期时间
     */
    public static String getStringByOffset(Date date, String format, int calendarField, int offset) {
        String strDate = null;
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            c.setTime(date);
            c.add(calendarField, offset);
            strDate = mSimpleDateFormat.format(c.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strDate;
    }


    /**
     * @param str
     * @param format
     * @return
     */
    public static Date getStringToDate(String str, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            return sdf.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return new Date();
    }


    /**
     * Date类型转化为String类型.
     *
     * @param date   the date
     * @param format the format
     * @return String String类型日期时间
     */
    public static String getStringByFormat(Date date, String format) {
        SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
        String strDate = "";
        try {
            strDate = mSimpleDateFormat.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strDate;
    }

    /**
     * 获取指定日期时间的字符串,用于导出想要的格式.
     *
     * @param strDate String形式的日期时间,必须为yyyy-MM-dd HH:mm:ss格式
     * @param format  输出格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @return String 转换后的String类型的日期时间
     */
    public static String getStringByFormat(String strDate, String format) {
        if (TextUtils.isEmpty(strDate))
            return "";
        String mDateTime = "";
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            c.setTime(mSimpleDateFormat.parse(strDate));
            SimpleDateFormat mSimpleDateFormat2 = new SimpleDateFormat(format);
            mDateTime = mSimpleDateFormat2.format(c.getTime());
        } catch (Exception e) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy K:m:s a", Locale.ENGLISH);
                Date d2 = sdf.parse(strDate);
                return getStringByFormat(d2, format);
            } catch (Exception e1) {
                Long l = Long.parseLong(strDate);
                return getStringByFormat(l, format);
            }
        }
        return mDateTime;
    }

    /**
     * 获取milliseconds表示的日期时间的字符串.
     *
     * @param milliseconds the milliseconds
     * @param format       格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @return String 日期时间字符串
     */
    public static String getStringByFormat(long milliseconds, String format) {
        String thisDateTime = "";
        try {
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            thisDateTime = mSimpleDateFormat.format(milliseconds);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return thisDateTime;
    }

    /**
     * 获取表示当前日期时间的字符串.
     *
     * @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @return String String类型的当前日期时间
     */
    public static String getCurrentDate(String format) {
        String curDateTime = null;
        try {
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            Calendar c = new GregorianCalendar();
            curDateTime = mSimpleDateFormat.format(c.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return curDateTime;

    }

    /**
     * 获取表示当前日期时间的字符串(可偏移).
     *
     * @param format        格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
     * @param calendarField Calendar属性,对应offset的值, 如(Calendar.DATE,表示+offset天,Calendar.HOUR_OF_DAY,表示+offset小时)
     * @param offset        偏移(值大于0,表示+,值小于0,表示-)
     * @return String String类型的日期时间
     */
    public static String getCurrentDateByOffset(String format, int calendarField, int offset) {
        String mDateTime = null;
        try {
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            Calendar c = new GregorianCalendar();
            c.add(calendarField, offset);
            mDateTime = mSimpleDateFormat.format(c.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mDateTime;

    }

    /**
     * 计算两个日期所差的天数.
     *
     * @param milliseconds1 the milliseconds1 big
     * @param milliseconds2 the milliseconds2 s
     * @return int 所差的天数
     */
    public static int getOffectDay(long milliseconds1, long milliseconds2) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTimeInMillis(milliseconds1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTimeInMillis(milliseconds2);
        //先判断是否同年
        /*int y1 = calendar1.get(Calendar.YEAR);
        int y2 = calendar2.get(Calendar.YEAR);
        int d1 = calendar1.get(Calendar.DAY_OF_YEAR);
        int d2 = calendar2.get(Calendar.DAY_OF_YEAR);
        int maxDays = 0;
        int day = 0;
        if (y1 - y2 > 0) {
            maxDays = calendar2.getActualMaximum(Calendar.DAY_OF_YEAR);
            day = d1 - d2 + maxDays;
        } else if (y1 - y2 < 0) {
            maxDays = calendar1.getActualMaximum(Calendar.DAY_OF_YEAR);
            day = d1 - d2 - maxDays;
        } else {
            day = d1 - d2;
        }*/
        return getOffectDay(calendar2.getTime(), calendar1.getTime());
    }

    /**
     * 计算两个日期所差的天数.
     *
     * @param startDate startDate s
     * @param endDate   endDate big
     * @return int 无正负情况
     */
    public static int getOffectDay(Date startDate, Date endDate) {
        Calendar fromCalendar = Calendar.getInstance();
        fromCalendar.setTime(startDate);
        fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
        fromCalendar.set(Calendar.MINUTE, 0);
        fromCalendar.set(Calendar.SECOND, 0);
        fromCalendar.set(Calendar.MILLISECOND, 0);

        Calendar toCalendar = Calendar.getInstance();
        toCalendar.setTime(endDate);
        toCalendar.set(Calendar.HOUR_OF_DAY, 0);
        toCalendar.set(Calendar.MINUTE, 0);
        toCalendar.set(Calendar.SECOND, 0);
        toCalendar.set(Calendar.MILLISECOND, 0);
        long timec = toCalendar.getTime().getTime() - fromCalendar.getTime().getTime();
        return (int) (timec / (1000 * 60 * 60 * 24));
    }

    /**
     * 计算两个日期所差的小时数.
     *
     * @param date1 第一个时间的毫秒表示
     * @param date2 第二个时间的毫秒表示
     * @return int 所差的小时数
     */
    public static int getOffectHour(long date1, long date2) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTimeInMillis(date1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTimeInMillis(date2);
        int h1 = calendar1.get(Calendar.HOUR_OF_DAY);
        int h2 = calendar2.get(Calendar.HOUR_OF_DAY);
        int h = 0;
        int day = getOffectDay(date1, date2);
        h = h1 - h2 + day * 24;
        return h;
    }

    /**
     * 计算两个日期所差的分钟数.
     *
     * @param date1 第一个时间的毫秒表示
     * @param date2 第二个时间的毫秒表示
     * @return int 所差的分钟数
     */
    public static int getOffectMinutes(long date1, long date2) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTimeInMillis(date1);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTimeInMillis(date2);
        int m1 = calendar1.get(Calendar.MINUTE);
        int m2 = calendar2.get(Calendar.MINUTE);
        int h = getOffectHour(date1, date2);
        int m = 0;
        m = m1 - m2 + h * 60;
        return m;
    }

    /**
     * 获取本周一.
     *
     * @param format format
     * @return String String类型日期时间
     */
    public static String getFirstDayOfWeek(String format) {
        return getDayOfWeek(format, Calendar.MONDAY);
    }

    /**
     * 获取本周日.
     *
     * @param format the format
     * @return String String类型日期时间
     */
    public static String getLastDayOfWeek(String format) {
        return getDayOfWeek(format, Calendar.SUNDAY);
    }

    /**
     * 获取本周的某一天.
     *
     * @param format        format
     * @param calendarField calendarField
     * @return String String类型日期时间
     */
    private static String getDayOfWeek(String format, int calendarField) {
        String strDate = null;
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            int week = c.get(Calendar.DAY_OF_WEEK);
            if (week == calendarField) {
                strDate = mSimpleDateFormat.format(c.getTime());
            } else {
                int offectDay = calendarField - week;
                if (calendarField == Calendar.SUNDAY) {
                    offectDay = 7 - Math.abs(offectDay);
                }
                c.add(Calendar.DATE, offectDay);
                strDate = mSimpleDateFormat.format(c.getTime());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strDate;
    }

    /**
     * 获取当前时间和当前时间前30天时间
     *
     * @return
     */
    public static String[] getDateOfTodayTofirst() {
        String[] dates = new String[2];
        Calendar calendar = Calendar.getInstance();
        dates[1] = UtilsString.longToStringDate(calendar.getTimeInMillis(), dateFormatYMD);//今天
        calendar.add(Calendar.MONTH, -1);
        dates[0] = UtilsString.longToStringDate(calendar.getTimeInMillis(), dateFormatYMD);
        return dates;
    }


    /**
     * 获取本月第一天.
     *
     * @param format format
     * @return String String类型日期时间
     */
    public static String getFirstDayOfMonth(String format) {
        String strDate = null;
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            //当前月的第一天
            c.set(GregorianCalendar.DAY_OF_MONTH, 1);
            strDate = mSimpleDateFormat.format(c.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strDate;

    }

    /**
     * 获取本月最后一天.
     *
     * @param format format
     * @return String String类型日期时间
     */
    public static String getLastDayOfMonth(String format) {
        String strDate = null;
        try {
            Calendar c = new GregorianCalendar();
            SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
            // 当前月的最后一天
            c.set(Calendar.DATE, 1);
            c.roll(Calendar.DATE, -1);
            strDate = mSimpleDateFormat.format(c.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strDate;
    }

    /**
     * 获取表示当前日期的0点时间毫秒数.
     *
     * @return long the first time of day
     */
    public static long getFirstTimeOfDay() {
        Date date = null;
        try {
            String currentDate = getCurrentDate(dateFormatYMD);
            date = getDateByFormat(currentDate + " 00:00:00", dateFormatYMDHMS);
            return date.getTime();
        } catch (Exception e) {
        }
        return -1;
    }


    /**
     * 获取传入日期的0点的时间毫秒
     *
     * @param str
     * @return
     */
    public static long getFirstTimeOfDay(String str) {
        Date date = null;
        try {
            String currentDate = getStringByFormat(str, dateFormatYMD);
            date = getDateByFormat(currentDate + " 00:00:00", dateFormatYMDHMS);
            return date.getTime();
        } catch (Exception e) {
        }
        return -1;
    }


    /**
     * 获取表示当前日期24点时间毫秒数.
     *
     * @return long the last time of day
     */
    public static long getLastTimeOfDay() {
        Date date = null;
        try {
            String currentDate = getCurrentDate(dateFormatYMD);
            date = getDateByFormat(currentDate + " 24:00:00", dateFormatYMDHMS);
            return date.getTime();
        } catch (Exception e) {
        }
        return -1;
    }

    /**
     * 判断是否是闰年()(year能被4整除 并且 不能被100整除) 或者 year能被400整除,则该年为闰年.
     *
     * @param year 年代(如2012)
     * @return boolean 是否为闰年
     */
    public static boolean isLeapYear(int year) {
        if ((year % 4 == 0 && year % 400 != 0) || year % 400 == 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 以友好的方式显示时间
     *
     * @param sdate     sdate
     * @param outFormat outFormat
     * @return String
     */
    public static String formatDateStr2Desc(String sdate, String outFormat) {
        try {

            if (!TextUtils.isEmpty(sdate) && (sdate.length() == 10 || sdate.length() == 9 || sdate.length() == 8)) {
                sdate = sdate + " 00:00";
            }

            Date time = getDateByFormat(sdate, dateFormatYMDHM);

            String ftime = "";
            Calendar cal = Calendar.getInstance();
            // 判断是否是同一天
            String curDate = getCurrentDate(dateFormatYMDHM);
            String paramDate = getStringByFormat(time, dateFormatYMDHM);

            if (curDate.equals(paramDate)) {
                int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
                if (hour == 0)
                    ftime = Math.max(
                            (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                            + "分钟前";
                else
                    ftime = hour + "小时前";
                return ftime;
            }

            long lt = time.getTime() / 86400000;
            long ct = cal.getTimeInMillis() / 86400000;
            int days = (int) (ct - lt);
            if (days == 0) {
                int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
                if (hour == 0)
                    ftime = Math.max(
                            (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                            + "分钟前";
                else
                    ftime = hour + "小时前";
            } else if (days == 1) {
                ftime = "昨天";
            } else if (days == 2) {
                ftime = "前天 ";
            } else if (days > 2 && days < 31) {
                ftime = days + "天前";
            } else if (days >= 31 && days <= 2 * 31) {
                ftime = "一个月前";
            } else if (days > 2 * 31 && days <= 3 * 31) {
                ftime = "2个月前";
            } else if (days > 3 * 31 && days <= 4 * 31) {
                ftime = "3个月前";
            } else {
                ftime = getStringByFormat(time, outFormat);
            }
            return ftime;
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 取指定日期为星期几.
     *
     * @param strDate  指定日期
     * @param inFormat 指定日期格式
     * @return String   星期几
     */
    public static String getWeekNumber(String strDate, String inFormat) {
        String week = "星期日";
        Calendar calendar = new GregorianCalendar();
        DateFormat df = new SimpleDateFormat(inFormat);
        try {
            calendar.setTime(df.parse(strDate));
        } catch (Exception e) {
            return "错误";
        }
        int intTemp = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        switch (intTemp) {
            case 0:
                week = "星期日";
                break;
            case 1:
                week = "星期一";
                break;
            case 2:
                week = "星期二";
                break;
            case 3:
                week = "星期三";
                break;
            case 4:
                week = "星期四";
                break;
            case 5:
                week = "星期五";
                break;
            case 6:
                week = "星期六";
                break;
            default:
                break;
        }
        return week;
    }

    /**
     * 根据给定的日期判断是否为上下午.
     *
     * @param strDate strDate
     * @param format  format
     * @return the time quantum
     */
    public static String getTimeQuantum(String strDate, String format) {
        Date mDate = getDateByFormat(strDate, format);
        int hour = mDate.getHours();
        if (hour >= 12)
            return "PM";
        else
            return "AM";
    }

    /**
     * 根据给定的毫秒数算得时间的描述.
     *
     * @param milliseconds the milliseconds
     * @return the time description
     */
    public static String getTimeDescription(long milliseconds) {
        if (milliseconds > 1000) {
            //大于一分
            if (milliseconds / 1000 / 60 > 1) {
                long minute = milliseconds / 1000 / 60;
                long second = milliseconds / 1000 % 60;
                return minute + "分" + second + "秒";
            } else {
                //显示秒
                return milliseconds / 1000 + "秒";
            }
        } else {
            return milliseconds + "毫秒";
        }
    }


    /**
     * 将Calendar转成字符串
     *
     * @param calendar calendar
     * @param format   指定格式
     * @return String
     */
    public static String calendarConvertString(Calendar calendar, String format) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            return simpleDateFormat.format(calendar.getTime());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 将字符串转成Calendar
     *
     * @param times  times
     * @param format 指定格式
     * @return Calendar
     */
    public static Calendar stringConvertCalendar(String times, String format) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            Date date = simpleDateFormat.parse(times);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return calendar;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }


    /***
     * 比较2个时间的大小
     *
     * @param one one
     * @param two two
     * @return int ==0相等 >0one大于two <0one小于two
     */
    public static int calendarCompare(Calendar one, Calendar two) {
        int num = -1;
        try {
            num = one.compareTo(two);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return num;
    }

    /**
     * 得到当前时间的随机数
     *
     * @return String
     */
    public static String getCurRandomDate() {
        Calendar calendar = Calendar.getInstance();
        String curTimes = calendar.get(Calendar.YEAR) + ""
                + (calendar.get(Calendar.MONTH) + 1) + ""
                + calendar.get(Calendar.DAY_OF_MONTH) + ""
                + calendar.get(Calendar.HOUR_OF_DAY) + ""
                + calendar.get(Calendar.MINUTE) + ""
                + calendar.get(Calendar.SECOND) + ""
                + calendar.get(Calendar.MILLISECOND);

        return curTimes;
    }

    /**
     * 某年某月有多少天
     *
     * @param year  year
     * @param month month
     * @return int
     */
    public static int getDaysInMonth(int year, int month) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month - 1);
        return c.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    /**
     * 某年某月的第一天是周几
     *
     * @param year  year
     * @param month month
     * @return int
     */
    public static int getFirstWeekDayInMonth(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, 1);
        return c.get(Calendar.DAY_OF_WEEK) - 1;
    }

    /**
     * 得到2个时间戳之间相差的 天 时 分 秒
     *
     * @param date1 date1
     * @param date2 date2
     * @return long[]
     */
    public static long[] getDate(long date1, long date2) {
        long[] times = new long[]{0, 0, 0, 0};
        try {
            SimpleDateFormat dfs = new SimpleDateFormat(dateFormatYMDHMS);
            Date begin = dfs.parse(getStringByFormat(date1, dateFormatYMDHMS));

            Date end = dfs.parse(getStringByFormat(date2, dateFormatYMDHMS));


            long between = (end.getTime() - begin.getTime()) / 1000;//除以1000是为了转换成秒

            long day1 = between / (24 * 3600);
            long hour1 = between % (24 * 3600) / 3600;
            long minute1 = between % 3600 / 60;
            long second1 = between % 60 / 60;
            times[0] = day1;
            times[1] = hour1;
            times[2] = minute1;
            times[3] = second1;
        } catch (Exception ex) {
        }
        return times;
    }


}

  

posted @ 2022-05-27 21:33  bg_不够  阅读(343)  评论(0编辑  收藏  举报