您的位置:首页 > 移动开发 > Android开发

Android中时间处理类

2016-03-21 11:00 316 查看

package com.haishi.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {
   
    public static String compDate(Date date, int dayNum, Boolean flag) {
        if (!date.equals(null)) {
            // 格式化日期Date
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            String strDate = df.format(date);
            // 获取给定日期的年,月,日
            String strYear = strDate.substring(0, 4);
            int intYear = Integer.valueOf(strYear);
            String strMonth = strDate.substring(5, 7);
            int intMonth = Integer.valueOf(strMonth);
            String strDay = strDate.substring(8, 10);
            int intDay = Integer.valueOf(strDay);
            int compDay;
            // 传入的flag做出对应的将来日期计算
            if (flag) {
                // 分出月份来计算
                compDay = intDay + dayNum;
                switch (intMonth) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                    // 计算出的天数大于31时,天数减1,月份加1
                    if (compDay > 31) {
                        compDay = compDay - 31;
                        intMonth += 1;
                    } else if (compDay <= 31) {
                        intDay = compDay;
                    }
                    break;
                case 12:
                    if (compDay > 31) {
                        compDay = compDay - 31;
                        intMonth = 1;
                        intYear += 1;
                    } else if (compDay <= 31) {
                        intDay = compDay;
                    }
                    break;
                case 2:
                    // 闰年的二月
                    if ((intYear % 4 == 0 && intYear % 100 != 0)
                            || (intYear % 400 == 0)) {
                        if (compDay > 29) {
                            compDay = compDay - 29;
                            intMonth += 1;
                        } else if (compDay <= 29) {
                            intDay = compDay;
                        }
                    } else {
                        if (compDay > 28) {
                            compDay = compDay - 28;
                            intMonth += 1;
                        } else if (compDay <= 28) {
                            intDay = compDay;
                        }
                    }
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    // 计算出的天数大于31时,天数减1,月份加1
                    if (compDay > 30) {
                        compDay = compDay - 30;
                        intMonth += 1;
                    } else if (compDay <= 30) {
                        intDay = compDay;
                    }
                    break;
                }

            }
            // 传入的flag做出对应过去的日期计算
            if (!flag) {
                // 分出月份来计算
                compDay = intDay - dayNum;
                switch (intMonth) {
                case 1:
                    if (compDay < 0) {
                        compDay = (intDay + 31) - dayNum;
                        intMonth = 12;
                        intYear -= 1;
                    } else if (compDay > 0) {
                        intDay = compDay;
                    } else if (compDay == 0) {
                        intDay = 31;
                        intMonth = 12;
                        intYear -= 1;
                    }
                    break;
                case 3:
                    // 闰年的二月
                    if (compDay < 0) {
                        if ((intYear % 4 == 0 && intYear % 100 != 0)
                                || (intYear % 400 == 0)) {
                            compDay = (intDay + 29) - dayNum;

                        } else {
                            compDay = (intDay + 28) - dayNum;
                        }
                        intMonth = 2;
                    } else if (compDay > 0) {
                        intDay = compDay;
                    } else if (compDay == 0) {
                        if ((intYear % 4 == 0 && intYear % 100 != 0)
                                || (intYear % 400 == 0)) {
                            intDay = 29;

                        } else {
                            intDay = 28;
                        }
                        intMonth = 2;
                    }
                    break;
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    // 计算出的天数小于0时,天数加上上个月的天数,在计算结果,月份减1
                    if (compDay < 0) {
                        compDay = (intDay + 30) - dayNum;
                        intMonth -= 1;
                    } else if (compDay == 0) {
                        intDay = 30;
                        intMonth -= 1;
                    } else if (compDay > 0) {
                        intDay = compDay;
                    }
                    break;
                case 2:
                case 4:
                case 6:
                case 9:
                case 11:
                    // 计算出的天数小于0时,天数加上上个月的天数,在计算结果,月份减1
                    if (compDay < 0) {
                        compDay = (intDay + 31) - dayNum;
                        intMonth -= 1;
                    } else if (compDay == 0) {
                        intDay = 31;
                        intMonth -= 1;
                    } else if (compDay > 0) {
                        intDay = compDay;
                    }
                    break;
                }

            }
            // 经过计算后的年月日拼接成字符串
            strYear = String.valueOf(intYear);
            strMonth = String.valueOf(intMonth);
            if (intMonth / 10 == 0) {
                strMonth = "0" + strMonth;
            }
            strDay = String.valueOf(intDay);
            if (intDay / 10 == 0) {
                strDay = "0" + strDay;
            }
            strDate = strYear + "-" + strMonth + "-" + strDay;
            return strDate;
        }
        return null;
    }

   
    public Date parseStringToDate(String date) throws ParseException {
        Date result = null;
        String parse = date;
        parse = parse.replaceFirst("^[0-9]{4}([^0-9]?)", "yyyy$1");
        parse = parse.replaceFirst("^[0-9]{2}([^0-9]?)", "yy$1");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1MM$2");
        parse = parse.replaceFirst("([^0-9]?)
b787
[0-9]{1,2}( ?)", "$1dd$2");
        parse = parse.replaceFirst("( )[0-9]{1,2}([^0-9]?)", "$1HH$2");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1mm$2");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1ss$2");

        SimpleDateFormat format = new SimpleDateFormat(parse);

        result = format.parse(date);

        return result;
    }

   
    public String twoDateDistance(Date startDate, Date endDate) {

        if (startDate == null || endDate == null) {
            return null;
        }
        long timeLong = endDate.getTime() - startDate.getTime();
        long year = timeLong / (24 * 60 * 60 * 1000 * 365);
        String yearStr = String.valueOf(year);
        long month = timeLong % (24 * 60 * 60 * 1000 * 365)
                / (24 * 60 * 60 * 1000 * 30);
        String monthStr = String.valueOf(month);
        long day = timeLong % (24 * 60 * 60 * 1000 * 365)
                % (24 * 60 * 60 * 1000 * 30) / (24 * 60 * 60 * 1000);
        String dayStr = String.valueOf(day);
        long hour = timeLong % (24 * 60 * 60 * 1000 * 365)
                % (24 * 60 * 60 * 1000 * 30) % (24 * 60 * 60 * 1000)
                / (60 * 60 * 1000);
        String hourStr = String.valueOf(hour);
        long minute = timeLong % (24 * 60 * 60 * 1000 * 365)
                % (24 * 60 * 60 * 1000 * 30) % (24 * 60 * 60 * 1000)
                % (60 * 60 * 1000) / (60 * 1000);
        String minuteStr = String.valueOf(minute);
        String returnStr = null;
        if (year != 0) {
            returnStr = yearStr + "年";
        } else if (month != 0) {
            returnStr = monthStr + "月";
        } else if (day != 0) {
            returnStr = dayStr + "天";
        } else if (hour != 0) {
            returnStr = hourStr + "小时";
        } else if (minute != 0) {
            returnStr = minuteStr + "分钟";
        }
        return returnStr==null?"1秒 前":returnStr+" 前";
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: