日期工具类

来源:互联网 发布:淘宝卖家真实名字 编辑:程序博客网 时间:2024/06/15 13:08

日期工具类

import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import org.joda.time.DateTime;import org.joda.time.LocalDate;import org.joda.time.Period;import org.joda.time.PeriodType;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;public class DateUtil {/** * 比较两个日期的年月日,忽略时分秒。 *  * @param d1 * @param d2 * @return 如果d1晚于d2返回大于零的值,如果d1等于d2返回0,否则返回一个负值。 */public static int compare(Date d1, Date d2) {return new LocalDate(d1.getTime()).compareTo(new LocalDate(d2.getTime()));}/** * 将日期转换成Date对象,支持的格式为yyyyMMdd, yyyyMMddHHmmss或者yyyy-MM-dd, yyyy-MM-dd * HH:mm:ss,日期分隔符为(-,/,\)中的任意一个, 时间分隔符为(:)。 如果传入的日期格式不正确将返回null。 *  * @param date * @return 如果传入的日期格式正确将返回一个Date对象,否则返回null。 */public static Date toDate(String str) {if (str == null|| (str.length() != 8 && str.length() != 14&& str.length() != 10 && str.length() != 19)) {return null;}String pattern = null;if (str.length() == 8) {pattern = "yyyyMMdd";} else if (str.length() == 14) {pattern = "yyyyMMddHHmmss";} else if (str.length() == 10 || str.length() == 19) {if (str.contains("-")) {pattern = "yyyy-MM-dd";} else if (str.contains("/")) {pattern = "yyyy/MM/dd";} else if (str.contains("\\")) {pattern = "yyyy\\MM\\dd";}if (str.length() == 19) {pattern += " HH:mm:ss";}}DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern);return DateTime.parse(str, dtf).toDate();}/** * 按如下格式:yyyy-MM-dd 返回日期。 *  * @param date * @return */public static String toString(Date date) {if (date == null) {return null;}return new DateTime(date).toString("yyyy-MM-dd");}/** * 按指定的格式返回日期。 *  * @param date * @param pattern * @return */public static String toString(Date date, String pattern) {if (date == null) {return null;}return new DateTime(date).toString(pattern);}/** * 按如下格式:yyyy-MM-dd HH:mm:ss 返回日期。 *  * @param date * @return */public static String toLongString(Date date) {if (date == null) {return null;}return new DateTime(date).toString("yyyy-MM-dd HH:mm:dd");}/** * 按指定格式返回日期。 *  * @param date * @param pattern * @return */public static String toLongString(Date date, String pattern) {if (date == null) {return null;}return new DateTime(date).toString(pattern);}/** * 获取基准日期是开始日期后的第几周,0到7天为第一周,8到14到第二周,依此类推。 *  * @param begin *            起始日期。 * @param datum *            基准日期。 * @return 基准日期是开始日期后的第几周。 */public static int getWeeks(Date begin, Date datum) {if (compare(begin, datum) > 0) {return -1;}int days = getPeriod(begin, datum);return days % 7 > 0 ? days / 7 + 1 : days / 7;}/** * 计算周年。 *  * @param beginDate *            起始日期。 * @param calculateDate *            计算日。 * @return */public static int getAnniversary(Date beginDate, Date calculateDate) {DateTime start = new DateTime(beginDate);DateTime end = new DateTime();if (calculateDate != null) {end = new DateTime(calculateDate);}Period p = new Period(start, end, PeriodType.years());return p.getYears();}/** * 计算两个日期之间的天数,参数null表示当前日期。如果date2为null,计算date1到当前时间的天数。 *  * @param date1 * @param date2 * @return */public static int getPeriod(Date date1, Date date2) {if (date1 == null && date2 == null) {return 0;}DateTime start = new DateTime(date1);DateTime end = new DateTime();if (date2 != null) {end = new DateTime(date2);}Period p = new Period(start, end, PeriodType.days());return p.getDays();} /**  * 计算年龄  * @param birthday 出生日期  * @param calculateDate 计算日期(不填默认为当前日期)  * @return  */    public static int getAgeByBirthday(Date birthday, Date calculateDate){    Calendar cal = Calendar.getInstance();        if (calculateDate != null) {    cal.setTime(calculateDate);}        if (cal.before(birthday)) {    throw new IllegalArgumentException(    "The birthDay is before Now.It's unbelievable!");    }    int yearNow = cal.get(Calendar.YEAR);    int monthNow = cal.get(Calendar.MONTH) + 1;    int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);    cal.setTime(birthday);    int yearBirth = cal.get(Calendar.YEAR);    int monthBirth = cal.get(Calendar.MONTH) + 1;    int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);    int age = yearNow - yearBirth;    if (monthNow <= monthBirth) {    if (monthNow == monthBirth) {     if (dayOfMonthNow < dayOfMonthBirth) {    age--;    }    } else {    age--;    }    }    return age;    }    /** * 获得本周星期日的日期 *  * @return */public static Date getCurrentWeekday() {int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);Date monday = currentDate.getTime();return monday;}/** * 获得下周星期一的日期 *  * @return */public static Date getNextMonday() {int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);Date monday = currentDate.getTime();return monday;}/** * 获得下周星期日的日期 *  * @return */public static Date getNextSunday() {int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6);Date monday = currentDate.getTime();return monday;}/** * 获得当前日期与本周日相差的天数 *  * @return */private static int getMondayPlus() {Calendar cd = Calendar.getInstance();// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1if (dayOfWeek == 1) {return 0;} else if (dayOfWeek == 0) {return -6;} else {return 1 - dayOfWeek;}}        /** * 获取年份。 *  * @param date * @return */public static int getYear(Date date) {return new DateTime(date).getYear();}/** * @param date * @return 实际月份的字面值,比Calendar返回的值多1。 */public static int getMonth(Date date) {return new DateTime(date).getMonthOfYear();}/** * @param date * @return */public static int getDayOfMonth(Date date) {return new DateTime(date).getDayOfMonth();}/** * @param date * @return */public static int getHour(Date date) {return new DateTime(date).getHourOfDay();}/** * @param date * @return */public static int getMunite(Date date) {return new DateTime(date).getMinuteOfHour();}/** * @param date * @return */public static int getSecond(Date date) {return new DateTime(date).getSecondOfMinute();}}


原创粉丝点击