我自己总结的一个日期使用类,请大家多指教。
package com.lzw.datetime;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import com.lzw.io.Out;
/**
* 格式化、解析日期、时间
*
* * * * * * * * * * * * * * * * * * *
格式
结果
yyyy-MM-dd
2007-11-07
yyyy-MM-dd HH:mm:ss
2007-11-07 16:52:29
......
......
*
* 解析字符串格式的日期获得 java.util.Date 类型
*
* * * * * * * * * * * * * * * * * *
stringDate
pattern
2007-12-11
yyyy-MM-dd
2007-12-12 15:30
yyyy-MM-dd HH:mm
......
......
*
* @author 李赵伟 Create: 2007-11-07
*/
public class Dateutils {
/**
* 日期格式:yyyy年MM月dd日 HH时mm分ss秒
*/
public static final String DateCNFormat = "yyyy年MM月dd日 HH时mm分ss秒";
/**
* 日期格式:yyyy-MM-dd
*/
public static final String DateDayFormat = "yyyy-MM-dd";
/**
* 日期格式:yyyyMMdd
*/
public static final String DateDayFormat1 = "yyyyMMdd";
/**
* 日期格式:yyyy-MM-dd_HH-mm-ss
*/
public static final String DateFileFormat = "yyyy-MM-dd_HH-mm-ss";
/**
* 日期格式:yyyyMMddHHmmss
*/
public static final String DateFormatFull = "yyyyMMddHHmmss";
/**
* 日期格式:yyyy-MM-dd HH:mm:ss,SSS
*/
public static final String DateMilliFormat = "yyyy-MM-dd HH:mm:ss,SSS";
/**
* 日期格式:yyyy-MM-dd HH:mm
*/
public static final String DateMinuteFormat = "yyyy-MM-dd HH:mm";
/**
* 日期格式:yyyy-MM-dd HH:mm:ss
*/
public static final String DateSecondFormat = "yyyy-MM-dd HH:mm:ss";
/**
* 一年中每个月的天数
*/
private static final int[] DayArray = new int[] { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
private static final SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd");
/**
* 获取指定月份的天数
*
* @param year
* @param month
* @return
*/
public static int getDayOfMonth(int year, int month) {
if (month < 1 || month > 12)
return -1;
int retn = 0;
if (2 == month) {
if (isLeapYear(year))
retn = 29;
else
retn = DayArray[month - 1];
} else
retn = DayArray[month - 1];
return retn;
}
/**
* 获取指定日期的所处月份的第一天
*
* @param c
* @return
*/
public static Calendar getFirstDayOfMonth(Calendar c) {
c.set(Calendar.DAY_OF_MONTH, 1);
return c;
}
/**
* 获取指定日期的所处月份的第一天
*
* @param date
* 指定日期。
* @return 指定日期的所处月份的第一天
*/
public static Date getFirstDayOfMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return getFirstDayOfMonth(c).getTime();
}
/**
* 获取指定日期的下一个月的第一天
*
* @param cal
* 指定日历。
* @return 指定日期的下一个月的第一天
*/
public static Calendar getFirstDayOfNextMonth(Calendar cal) {
cal.setTime(getNextMonth(cal.getTime()));
cal.setTime(getFirstDayOfMonth(cal.getTime()));
return cal;
}
/**
* 获取指定日期的下一个月的第一天
*
* @param date
* 指定日期。
* @return 指定日期的下一个月的第一天
*/
public static Date getFirstDayOfNextMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getFirstDayOfNextMonth(cal).getTime();
}
/**
* 获取指定日期的下一个星期的第一天
*
* @param cal
* 指定日历。
* @return 指定日期的下一个星期的第一天
*/
public static Calendar getFirstDayOfNextWeek(Calendar cal) {
cal.setTime(getNextWeek(cal.getTime()));
cal.setTime(getFirstDayOfWeek(cal.getTime()));
return cal;
}
/**
* 获取指定日期的下一个星期的第一天
*
* @param date
* 指定日期。
* @return 指定日期的下一个星期的第一天
*/
public static Date getFirstDayOfNextWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getFirstDayOfNextWeek(cal).getTime();
}
/**
* 获取指定日期的上一个月的第一天
*
* @param cal
* @return
*/
public static Calendar getFirstDayOfPreviousMonth(Calendar cal) {
cal.setTime(getPreviousMonth(cal.getTime()));
cal.setTime(getFirstDayOfMonth(cal.getTime()));
return cal;
}
/**
* 获取指定日期的上一个月的第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfPreviousMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getFirstDayOfPreviousMonth(cal).getTime();
}
/**
* 获取指定日期的上一个星期的星期一
*
* @param cal
* @return
*/
public static Calendar getFirstDayOfPreviousWeek(Calendar cal) {
cal.setTime(getPreviousWeek(cal.getTime()));
cal.setTime(getFirstDayOfWeek(cal.getTime()));
return cal;
}
/**
* 获取指定日期的上一个星期的星期一
*
* @param date
* @return
*/
public static Date getFirstDayOfPreviousWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getFirstDayOfPreviousWeek(cal).getTime();
}
/**
* 获取指定日期的所处星期的第一天
*
* @param cal
* 指定日历。
* @return 指定日期的所处星期的第一天
*/
public static Calendar getFirstDayOfWeek(Calendar cal) {
switch (cal.get(Calendar.DAY_OF_WEEK)) {
case (Calendar.SUNDAY):
cal.add(Calendar.DATE, -6);
break;
case (Calendar.MONDAY):
cal.add(Calendar.DATE, 0);
break;
case (Calendar.TUESDAY):
cal.add(Calendar.DATE, -1);
break;
case (Calendar.WEDNESDAY):
cal.add(Calendar.DATE, -2);
break;
case (Calendar.THURSDAY):
cal.add(Calendar.DATE, -3);
break;
case (Calendar.FRIDAY):
cal.add(Calendar.DATE, -4);
break;
case (Calendar.SATURDAY):
cal.add(Calendar.DATE, -5);
break;
}
return cal;
}
/**
* 获取指定日期的所处星期的第一天
*
* @param date
* 指定日期。
* @return 指定日期的所处星期的第一天
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getFirstDayOfWeek(cal).getTime();
}
/**
* 获取指定日期的所处月份的最后一天
*
* 1. 如果date在1月,则为31日
* 2. 如果date在2月,则为28日;如果date在闰年的2月,则为29日
* 3. 如果date在3月,则为31日
* 4. 如果date在4月,则为30日
* 5. 如果date在5月,则为31日
* 6. 如果date在6月,则为30日
* 7. 如果date在7月,则为31日
* 8. 如果date在8月,则为31日
* 9. 如果date在9月,则为30日
* 10. 如果date在10月,则为31日
* 11. 如果date在11月,则为30日
* 12. 如果date在12月,则为31日
*
* @param cal
* 指定日历。
* @return 指定日期的所处月份的最后一天
*/
public static Calendar getLastDayOfMonth(Calendar cal) {
switch (cal.get(Calendar.MONTH)) {
case 0:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 1:
cal.set(Calendar.DAY_OF_MONTH, 28);
break;
case 2:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 3:
cal.set(Calendar.DAY_OF_MONTH, 30);
break;
case 4:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 5:
cal.set(Calendar.DAY_OF_MONTH, 30);
break;
case 6:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 7:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 8:
cal.set(Calendar.DAY_OF_MONTH, 30);
break;
case 9:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
case 10:
cal.set(Calendar.DAY_OF_MONTH, 30);
break;
case 11:
cal.set(Calendar.DAY_OF_MONTH, 31);
break;
}
// 检查闰年
if ((cal.get(Calendar.MONTH) == Calendar.FEBRUARY)
&& (isLeapYear(cal.get(Calendar.YEAR)))) {
cal.set(Calendar.DAY_OF_MONTH, 29);
}
return cal;
}
/**
* 获取指定日期的所处月份的最后一天
*
* @param date
* 指定日期。
* @return 指定日期的所处月份的最后一天
*/
public static Date getLastDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfMonth(cal).getTime();
}
/**
* 获取指定日期的下一个月的最后一天
*
* @param cal
* 指定日期。
* @return 指定日期的下一个月的最后一天
*/
public static Calendar getLastDayOfNextMonth(Calendar cal) {
cal.setTime(getNextMonth(cal.getTime()));
cal.setTime(getLastDayOfMonth(cal.getTime()));
return cal;
}
/**
* 获取指定日期的下一个月的最后一天
*
* @param date
* 指定日期。
* @return 指定日期的下一个月的最后一天
*/
public static Date getLastDayOfNextMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfNextMonth(cal).getTime();
}
/**
* 获取指定日期的下一个星期的最后一天
*
* @param cal
* 指定日期。
* @return 指定日期的下一个星期的最后一天
*/
public static Calendar getLastDayOfNextWeek(Calendar cal) {
cal.setTime(getNextWeek(cal.getTime()));
cal.setTime(getLastDayOfWeek(cal.getTime()));
return cal;
}
/**
* 获取指定日期的下一个星期的最后一天
*
* @param date
* 指定日期。
* @return 指定日期的下一个星期的最后一天
*/
public static Date getLastDayOfNextWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfNextWeek(cal).getTime();
}
/**
* 获取指定日期的上一个月的最后一天
*
* @param cal
* @return
*/
public static Calendar getLastDayOfPreviousMonth(Calendar cal) {
cal.setTime(getPreviousMonth(cal.getTime()));
cal.setTime(getLastDayOfMonth(cal.getTime()));
return cal;
}
/**
* 获取指定日期的上一个月的最后一天
*
* @param date
* @return
*/
public static Date getLastDayOfPreviousMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfPreviousMonth(cal).getTime();
}
/**
* 获取指定日期的上一个星期的星期日
*
* @param cal
* @return
*/
public static Calendar getLastDayOfPreviousWeek(Calendar cal) {
cal.setTime(getPreviousWeek(cal.getTime()));
cal.setTime(getLastDayOfWeek(cal.getTime()));
return cal;
}
/**
* 获取指定日期的上一个星期的星期日
*
* @param date
* @return
*/
public static Date getLastDayOfPreviousWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfPreviousWeek(cal).getTime();
}
/**
* 获取指定日期的所处星期的最后一天
*
* @param cal
* 指定日历。
* @return 指定日期的所处星期的最后一天
*/
public static Calendar getLastDayOfWeek(Calendar cal) {
switch (cal.get(Calendar.DAY_OF_WEEK)) {
case (Calendar.SUNDAY):
cal.add(Calendar.DATE, 0);
break;
case (Calendar.MONDAY):
cal.add(Calendar.DATE, 6);
break;
case (Calendar.TUESDAY):
cal.add(Calendar.DATE, 5);
break;
case (Calendar.WEDNESDAY):
cal.add(Calendar.DATE, 4);
break;
case (Calendar.THURSDAY):
cal.add(Calendar.DATE, 3);
break;
case (Calendar.FRIDAY):
cal.add(Calendar.DATE, 2);
break;
case (Calendar.SATURDAY):
cal.add(Calendar.DATE, 1);
break;
}
return cal;
}
/**
* 获取指定日期的所处星期的最后一天
*
* @param date
* 指定日期。
* @return 指定日期的所处星期的最后一天
*/
public static Date getLastDayOfWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getLastDayOfWeek(cal).getTime();
}
/**
* 获取指定日期的下一天
*
* @param cal
* 指定日历。
* @return 指定日期的下一天
*/
public static Calendar getNextDay(Calendar cal) {
cal.add(Calendar.DATE, 1);
return cal;
}
/**
* 获取指定日期的下一天
*
* @param date
* 指定日期。
* @return 指定日期的下一天
*/
public static Date getNextDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getNextDay(cal).getTime();
}
/**
* 获取指定日期的下一个月
*
* @param cal
* 指定日历。
* @return 指定日期的下一个月
*/
public static Calendar getNextMonth(Calendar cal) {
cal.add(Calendar.MONTH, 1);
return cal;
}
/**
* 获取指定日期的下一个月
*
* @param date
* 指定日期。
* @return 指定日期的下一个月
*/
public static Date getNextMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getNextMonth(cal).getTime();
}
/**
* 获取指定日期的下一个星期
*
* @param cal
* 指定日历。
* @return 指定日期的下一个星期
*/
public static Calendar getNextWeek(Calendar cal) {
cal.add(Calendar.DATE, 7);
return cal;
}
/**
* 获取指定日期的下一个星期
*
* @param date
* 指定日期。
* @return 指定日期的下一个星期
*/
public static Date getNextWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getNextWeek(cal).getTime();
}
/**
* 获取指定日期的后一个工作日
*
* 1.如果date是星期五,则加3天
* 2.如果date是星期六,则加2天, 否则加1天
*
* @param cal
* 指定日历。
* @return 指定日期的后一个工作日
*/
public static Calendar getNextWorkingDay(Calendar cal) {
switch (cal.get(Calendar.DAY_OF_WEEK)) {
case Calendar.FRIDAY:
cal.add(Calendar.DATE, 3);
break;
case Calendar.SATURDAY:
cal.add(Calendar.DATE, 2);
break;
default:
cal.add(Calendar.DATE, 1);
break;
}
return cal;
}
/**
* 获取指定日期的后一个工作日
*
* @param date
* 指定日期。
* @return 指定日期的后一个工作日
*/
public static Date getNextWorkingDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getNextWorkingDay(cal).getTime();
}
/**
* 获取指定日期的上一个月
*
* @param date
* @return
*/
public static Date getPreviousMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getPreviousMonth(cal).getTime();
}
/**
* 获取指定日期的上一个月
*
* @param cal
* @return
*/
public static Calendar getPreviousMonth(Calendar cal) {
cal.add(Calendar.MONTH, -1);
return cal;
}
/**
* 获取指定日期的前一天
*
* @param cal
* @return
*/
public static Calendar getPreviousDay(Calendar cal) {
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal;
}
/**
* 获取指定日期的前一天
*
* @param date
* @return
*/
public static Date getPreviousDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return getPreviousDay(c).getTime();
}
/**
* 获取指定日期的前一个星期
*
* @param cal
* @return
*/
public static Calendar getPreviousWeek(Calendar cal) {
cal.add(Calendar.WEEK_OF_MONTH, -1);
return cal;
}
/**
* 获取指定日期的前一个星期
*
* @param date
* @return
*/
public static Date getPreviousWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getPreviousWeek(cal).getTime();
}
/**
* 得到指定日期的前一个工作日
*
* @param cal
* 指定日历。
* @return 指定日期的前一个工作日
*/
public static Calendar getPreviousWorkingDay(Calendar cal) {
switch (cal.get(Calendar.DAY_OF_WEEK)) {
case (Calendar.MONDAY):
cal.add(Calendar.DATE, -3);
break;
case (Calendar.SUNDAY):
cal.add(Calendar.DATE, -2);
break;
default:
cal.add(Calendar.DATE, -1);
break;
}
return cal;
}
/**
* 得到指定日期的前一个工作日
*
* 1.如果date是星期日,则减3天
* 2.如果date是星期六,则减2天, 否则减1天
*
* @param date
* 指定日期。
* @return 指定日期的前一个工作日
*/
public static Date getPreviousWorkingDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return getPreviousWorkingDay(cal).getTime();
}
/**
* 判断指定日期的年份是否是闰年
*
* @param cal
* 指定日历
* @return 是否闰年
*/
public static boolean isLeapYear(Calendar cal) {
int year = cal.get(Calendar.YEAR);
return isLeapYear(year);
}
/**
* 判断指定日期的年份是否是闰年
*
* @param date
* 指定日期。
* @return 是否闰年
*/
public static boolean isLeapYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return isLeapYear(cal);
}
/**
* 判断闰年
*
* 1. 被400整除是闰年
* 2. 能被4整除同时不能被100整除则是闰年
*
* @param year
* 指定的年
* @return 是否闰年
*/
public static boolean isLeapYear(int year) {
int r = year % 400;
if (0 == r)
return true;
r = year % 4;
int i = year % 100;
return ((0 == r && 0 != i) ? true : false);
}
/**
* 解析字符串格式的日期获得 java.util.Calendar 类型
*
* @param stringDate
* 字符串格式的日期
* @param pattern
* 该日期的字符串表示形式
* @return
*/
public static Calendar parseCalendarByFormat(String stringDate,
String pattern) {
Calendar cal = Calendar.getInstance();
cal.setTime(parseDateByFormat(stringDate, pattern));
return cal;
}
/**
* 解析字符串格式的日期获得 java.util.Date 类型
*
* * * * * * * * * * * * * *
stringDate
pattern
2007-12-11
yyyy-MM-dd
2007-12-12 15:30
yyyy-MM-dd HH:mm
*
* @param stringDate
* 字符串格式的日期
* @param pattern
* 该日期的字符串表示形式
* @return
*/
public static Date parseDateByFormat(String stringDate, String pattern) {
Date date = null;
sdf.applyPattern(pattern);
try {
date = sdf.parse(stringDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 格式化后的当前日期
*
* @param cal
* @param pattern
* @return
*/
public static String toStringByFormat(Calendar cal, String pattern) {
return toStringByFormat(cal.getTime(), pattern);
}
/**
* 格式化后的当前日期
*
* @param date
* @param pattern
* @return
*/
public static String toStringByFormat(Date date, final String pattern) {
sdf.applyPattern(pattern);
return sdf.format(date);
}
/**
* 格式化后的当前日期
*
* * * * * * * * * * * * * *
格式
结果
yyyy-MM-dd
2007-11-07
yyyy-MM-dd HH:mm:ss
2007-11-07 16:52:29
*
* @param pattern
* 日期格式
* @return 格式化后的当前日期
*/
public static String toStringByFormat(final String pattern) {
return toStringByFormat(new Date(), pattern);
}
/**
* 格式化后的当前日期
*
* @param pattern
* 日期格式
* @param second
* 时间毫秒数, long
* @return 格式化后的当前日期
*/
public static String toStringByFormat(final String pattern, long second) {
return toStringByFormat(new Date(second), pattern);
}
/**
* 格式化后的当前日期
*
* @param pattern
* 日期格式
* @param second
* 时间毫秒数, String
* @return 格式化后的当前日期
*/
public static String toStringByFormat(final String pattern, String second) {
Date date = new Date(Long.parseLong(second));
return toStringByFormat(date, pattern);
}
}