package com.xiaozhi.blog.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import org.joda.time.DateTime; /** * @author Steven * */ public class DateUtil { /** * */ private final static TimeZone timeZone = TimeZone.getTimeZone("GMT+08:00"); public final static String DATETIME = "yyyy-MM-dd HH:mm:ss"; public final static String DATE = "yyyy-MM-dd"; public final static String DATETIME2 = "yyyy-MM-dd HH:mm"; private DateUtil() { super(); // TODO Auto-generated constructor stub } /** * 将字符时间解析成Date日期类型 * @param timeString * @return */ public static Date parseTime(String timeString) { DateTime dateTime = new DateTime(timeString.replace(" ", "T")); return dateTime.toDate(); } /** * 按格式类型解析时间为字符 * @param time * @param pattern * @return */ public static String formatTime(Date time,String pattern) { return new DateTime(time).toString(pattern); } /** * 当天指定格式的日期字符串 * @param format 比如:“yyyy-MM-dd” * @return */ public static String getCurrentDate(String format) { return new DateTime().toString(format); } /** * 计算一个相对于今天的日期。day大于0,今天以后的日期;否则,今天以前的日期 * 返回的Date数据,包括时、分、秒 * @param day 距离今天有几天 * @return Date */ public static Date addCurrentDay(int day) { return new DateTime().plusDays(day).toDate(); } /** * 计算一个相对于现在时间的日期。hour大于0,今天以后的日期;否则,今天以前的日期 * 返回的Date数据,包括时、分、秒 * @param day 距离现在有多少小时 * @return Date */ public static Date addCurrentDateHour(int hour) { return new DateTime().plusHours(hour).toDate(); } /** * 根据生日获取当前的年龄 * @param birth * @return */ public static int getAgeByBirth(String birth){ DateTime birthday = new DateTime(birth.replace(" ", "T")); DateTime today = new DateTime(); return today.getYear()-birthday.getYear(); } //得到日期格式当天的显示 HH:mm;当天以前的显示 MM:dd public static String getTimeByDate(Date date) { Calendar today = Calendar.getInstance(); today.set(today.HOUR_OF_DAY, 0); today.set(today.MINUTE, 0); today.set(today.SECOND, 0); Calendar calendardate = Calendar.getInstance(); calendardate.setTime(date); Boolean bb = calendardate.before(today); String dateString = " "; if (bb) { int mouth = calendardate.get(calendardate.MONTH) + 1; //System.out.println(getFormatDate(mouth)); dateString = getFormatDate(mouth) + "-"+ getFormatDate(calendardate.get(calendardate.DAY_OF_MONTH)); } else dateString = getFormatDate(calendardate.get(calendardate.HOUR_OF_DAY)) + ":"+ getFormatDate(calendardate.get(calendardate.MINUTE)); return dateString; } private static String getFormatDate(int date){ return date<10?"0"+date:date+""; } //得到两个日期间隔的天数 public static int getDaysBetween(String beginDate, String endDate) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date bDate = format.parse(beginDate.toString()); Date eDate = format.parse(endDate.toString()); Calendar d1 = new GregorianCalendar(); d1.setTime(bDate); Calendar d2 = new GregorianCalendar(); d2.setTime(eDate); int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); int y2 = d2.get(Calendar.YEAR); if (d1.get(Calendar.YEAR) != y2) { d1 = (Calendar) d1.clone(); do { days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数 d1.add(Calendar.YEAR, 1); } while (d1.get(Calendar.YEAR) != y2); } return days; } public static void main(String[] args) { //String today = DateUtil.getTimeByDate(DateUtil.addCurrentDay(4)); //System.out.println(today); //int a = new BigDecimal(7/4.0).setScale(0, BigDecimal.ROUND_HALF_UP).intValue(); //System.out.println(a); } }