package com.lcr.tools.util.date; import java.io.Serializable; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateTimeUtil implements Serializable { /** * serialVersionUID:TODO * * @author: lu chunli * @date: 2012-5-13 下午02:44:59 * @version 1.0.0 * */ private static final long serialVersionUID = 1L; private static final SimpleDateFormat longDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static final SimpleDateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd"); /** * 根据一个日期,返回是星期几的字符串 */ private static String getWeek (String strDate) { // 再转换为时间 Date date = null; try { date = shortDateFormat.parse(strDate); } catch (ParseException e) { e.printStackTrace(); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return new SimpleDateFormat("EEEE").format(calendar.getTime()); } /** * 取当天(短日期类型) */ private static String getShortToday () { Date today = new Date(); return shortDateFormat.format(today); } /** * 取当天(长日期类型) */ private static String getLongToday () { Date today = new Date(); return longDateFormat.format(today); } /** * 取当天零点零分零秒 */ private static String getTodayStart () { Calendar calendar = Calendar.getInstance(); //如果没有这种设定的话回去系统的当期的时间 calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date date = new Date(calendar.getTimeInMillis()); return longDateFormat.format(date); } /** * 取当天23点59分59秒 */ private static String getTodayEnd () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); Date date = new Date(calendar.getTimeInMillis()); return longDateFormat.format(date); } /** * 取特定日期的零点零分零秒 */ private static String getDateStart (String strDate) { if (null == strDate || "".equals(strDate.trim())) { return ""; } Date date = null; try { date = shortDateFormat.parse(strDate); } catch (ParseException e) { e.printStackTrace(); } return longDateFormat.format(date); } /** * 取特定日期的零点零分零秒 */ private static String getDateEnd (String strDate) { if (null == strDate || "".equals(strDate.trim())) { return ""; } Date date = null; try { date = shortDateFormat.parse(strDate); } catch (ParseException e) { e.printStackTrace(); } //这样能够取到59分59秒 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 0); return longDateFormat.format(calendar.getTime()); } /** * 取当周周一 */ private static String getMondayOfThisWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); /*calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);*/ return shortDateFormat.format(calendar.getTime()); } /** * 取当周周日 */ private static String getSundayOfThisWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); /*calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);*/ //以上取得的是周一 calendar.add(Calendar.DATE, 6); return shortDateFormat.format(calendar.getTime()); } /** * 取上周周一 */ private static String getMondayOfPreviousWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); calendar.add(Calendar.DATE, -7); return shortDateFormat.format(calendar.getTime()); } /** * 取上周周日 */ private static String getSundayOfPreviousWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); calendar.add(Calendar.DATE, -1); return shortDateFormat.format(calendar.getTime()); } /** * 取下周周一 */ private static String getMondayOfNextWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); // 当周周一 calendar.add(Calendar.DATE, 7); return shortDateFormat.format(calendar.getTime()); } /** * 取下周周日 */ private static String getSundayOfNextWeek () { Calendar calendar = Calendar.getInstance(); int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (day_of_week == 0){ day_of_week = 7; } calendar.add(Calendar.DATE, -day_of_week + 1); // 当周周一 calendar.add(Calendar.DATE, 13); return shortDateFormat.format(calendar.getTime()); } /** * 取当月1号 */ private static String getFirstDayOfThisMonth () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, 1); // 设为当前月的1号 return shortDateFormat.format(calendar.getTime()); } /** * 取当月最后一天 */ private static String getLastDayOfThisMonth () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, 1); // 设为当前月的1号 calendar.add(Calendar.MONTH, 1); // 加一个月,变为下月的1号 calendar.add(Calendar.DATE, -1); // 减去一天,变为当月最后一天 return shortDateFormat.format(calendar.getTime()); } /** * 取上月1号 */ private static String getFirstDayOfPreviousMonth () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, 1); // 设为当前月的1号 calendar.add(Calendar.MONTH, -1); // 减一个月,变为上月的1号 return shortDateFormat.format(calendar.getTime()); } /** * 取上月最后一天 */ private static String getLastDayOfPreviousMonth () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, 1); // 设为当前月的1号 calendar.add(Calendar.DATE, -1); // 减去一天,变为上月最后一天 return shortDateFormat.format(calendar.getTime()); } /** * 取下月1号 */ private static String getFirstDayOfNextMonth () { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1); // 加一个月 calendar.set(Calendar.DATE, 1); // 把日期设置为当月第一天 return shortDateFormat.format(calendar.getTime()); } /** * 取下月最后一天 */ private static String getLastDayOfNextMonth () { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1);// 加一个月 calendar.set(Calendar.DATE, 1);// 把日期设置为当月第一天 calendar.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天 return shortDateFormat.format(calendar.getTime()); } /** * 获得本年有多少天 */ private static int getTotalDaysOfThisYear() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天 calendar.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。 int totalDays = calendar.get(Calendar.DAY_OF_YEAR); return totalDays; } /** * 获取某年某月的最后一天 */ private static int getLastDayOfMonth (int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } if (month == 2) { if (isLeapYear(year)) { return 29; } else { return 28; } } return 0; } /** * 是否闰年 */ public static boolean isLeapYear (int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } /** * 获得本年第一天的日期 */ public static String getFirstDayOfThisYear () { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_YEAR, 1); Date date = new Date(calendar.getTimeInMillis()); return shortDateFormat.format(date); } /** * 获得本年最后一天的日期 */ public static String getLastDayOfThisYear () { Date date = new Date(); String years = new SimpleDateFormat("yyyy").format(date); return years + "-12-31"; } /** * 获得上年第一天的日期 * */ public static String getFirstDayOfPreviousYear () { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, -1); // 若是 明年改为正整数1即可 calendar.set(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_YEAR, 1); Date date = new Date(calendar.getTimeInMillis()); return shortDateFormat.format(date); } /** * 两个时间之间的天数 */ public static long getDays (String date1, String date2) { if (date1 == null || "".equals(date1.trim())) { return 0; } if (date2 == null || "".equals(date2.trim())) { return 0; } // 转换为标准时间 Date date = null; Date mydate = null; try { date = shortDateFormat.parse(date1); mydate = shortDateFormat.parse(date2); } catch (Exception e) { e.printStackTrace(); } long day = 0; if (date.before(mydate)) { day = (mydate.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); } else { day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); } return day; } /** * */ public static void main(String[] args) { System.out.println("/*--------------------------两个时间之间的天数--------------------------*/"); System.out.println("两个时间之间的天数1 : " + getDays ("2012-05-10", "2012-05-15")); System.out.println("两个时间之间的天数2 : " + getDays ("2012-06-10", "2012-05-15")); System.out.println("/*--------------------------获得上年第一天的日期--------------------------*/"); System.out.println("获得上年第一天的日期 : " + getFirstDayOfPreviousYear ()); System.out.println("/*--------------------------获得本年最后一天的日期--------------------------*/"); System.out.println("获得本年最后一天的日期 : " + getLastDayOfThisYear ()); System.out.println("/*--------------------------获得本年第一天的日期--------------------------*/"); System.out.println("获得本年第一天的日期 : " + getFirstDayOfThisYear ()); System.out.println("/*--------------------------获取某年某月的最后一天--------------------------*/"); System.out.println("获取某年某月的最后一天 : " + getLastDayOfMonth (2012, 5)); System.out.println("/*--------------------------------是否闰年---------------------------------*/"); System.out.println("是否闰年 : " + isLeapYear(2012)); System.out.println("/*--------------------------获得本年有多少天--------------------------*/"); System.out.println("获得本年有多少天 : " + getTotalDaysOfThisYear()); System.out.println("/*--------------------------下月1号和最后一天--------------------------*/"); System.out.println("下月1号 : " + getFirstDayOfNextMonth()); System.out.println("下月最后一天 : " + getLastDayOfNextMonth ()); System.out.println("/*--------------------------上月1号和最后一天--------------------------*/"); System.out.println("上月1号 : " + getFirstDayOfPreviousMonth()); System.out.println("上月最后一天 : " + getLastDayOfPreviousMonth ()); System.out.println("/*--------------------------当月1号和最后一天--------------------------*/"); System.out.println("当月1号 : " + getFirstDayOfThisMonth()); System.out.println("当月最后一天 : " + getLastDayOfThisMonth ()); System.out.println("/*--------------------------当月1号和最后一天--------------------------*/"); System.out.println("当月1号 : " + getFirstDayOfThisMonth()); System.out.println("当月最后一天 : " + getLastDayOfThisMonth ()); System.out.println("/*--------------------------下周周一和周日--------------------------*/"); System.out.println("下周周一 : " + getMondayOfNextWeek()); System.out.println("下周周日 : " + getSundayOfNextWeek ()); System.out.println("/*--------------------------上周周一和周日--------------------------*/"); System.out.println("上周周一 : " + getMondayOfPreviousWeek()); System.out.println("上周周日 : " + getSundayOfPreviousWeek ()); System.out.println("/*--------------------------当周周一和周日--------------------------*/"); System.out.println("当周周一 : " + getMondayOfThisWeek ()); System.out.println("当周周日 : " + getSundayOfThisWeek ()); System.out.println("/*--------------------------特定日期(零点和23点)--------------------------*/"); System.out.println("特定日期(23点59分59秒) : " + getDateEnd ("2012-05-12")); System.out.println("特定日期(零点零分零秒) : " + getDateStart ("2012-05-12")); System.out.println("/*--------------------------当天(零点和23点)--------------------------*/"); System.out.println("当天(23点59分59秒) : " + getTodayEnd ()); System.out.println("当天(零点零分零秒) : " + getTodayStart ()); System.out.println("/*---------------------------当天(长日期格式和短日期格式)-------------------------*/"); System.out.println("当天(长日期格式) : " + getLongToday ()); System.out.println("当天(短日期格式) : " + getShortToday ()); System.out.println("/*---------------------------当天(长日期格式和短日期格式)-------------------------*/"); System.out.println("根据一个日期,返回是星期几的字符串 : " + getWeek ("2012-05-12")); } }