由于java中对日期 的处理不是很人性化,特将总结出来的一些日期处理方法贴出来。非常感谢原创。留做记忆。
package com.ebt.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public abstract class TimeUtil {
// ---当前日期的年,月,日,时,分,秒
public static Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int date = now.get(Calendar.DAY_OF_MONTH);
int month = now.get(Calendar.MONTH) + 1;
int hour = now.get(Calendar.HOUR);
int min = now.get(Calendar.MINUTE);
int sec = now.get(Calendar.SECOND);
// -------------------------------日期类型转换---------------------------------------------------------------------------
/**
* 字符型日期转化util.Date型日期
*
* @Param:p_strDate 字符型日期
*
* @param p_format 格式:"yyyy-MM-dd" / "yyyy-MM-dd hh:mm:ss"
*
* @Return:java.util.Date util.Date型日期
*
* @Throws: ParseException
*/
public static java.util.Date toUtilDateFromStrDateByFormat(
String p_strDate, String p_format) throws ParseException {
java.util.Date l_date = null;
java.text.DateFormat df = new java.text.SimpleDateFormat(p_format);
if (p_strDate != null && (!"".equals(p_strDate)) && p_format != null
&& (!"".equals(p_format))) {
l_date = df.parse(p_strDate);
}
return l_date;
}
/**
* 字符型日期转化成sql.Date型日期
*
* @param p_strDate 字符型日期
*
* @return java.sql.Date sql.Date型日期
*
* @throws ParseException
*/
public static java.sql.Date toSqlDateFromStrDate(String p_strDate)
throws ParseException {
java.sql.Date returnDate = null;
java.text.DateFormat sdf = new java.text.SimpleDateFormat();
if (p_strDate != null && (!"".equals(p_strDate))) {
returnDate = new java.sql.Date(sdf.parse(p_strDate).getTime());
}
return returnDate;
}
/**
* util.Date型日期转化指定格式的字符串型日期
*
* @param p_date Date
*
* @param p_format String 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
* 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
*
* @return String
*/
public static String toStrDateFromUtilDateByFormat(
java.util.Date p_utilDate, String p_format) throws ParseException {
String l_result = "";
if (p_utilDate != null) {
SimpleDateFormat sdf = new SimpleDateFormat(p_format);
l_result = sdf.format(p_utilDate);
}
return l_result;
}
/**
* util.Date型日期转化转化成Calendar日期
*
* @param p_utilDate Date
*
* @return Calendar
*/
public static Calendar toCalendarFromUtilDate(java.util.Date p_utilDate) {
Calendar c = Calendar.getInstance();
c.setTime(p_utilDate);
return c;
}
/**
* util.Date型日期转化sql.Date(年月日)型日期
*
* @Param: p_utilDate util.Date型日期
*
* @Return: java.sql.Date sql.Date型日期
*/
public static java.sql.Date toSqlDateFromUtilDate(java.util.Date p_utilDate) {
java.sql.Date returnDate = null;
if (p_utilDate != null) {
returnDate = new java.sql.Date(p_utilDate.getTime());
}
return returnDate;
}
/**
* util.Date型日期转化sql.Time(时分秒)型日期
*
* @Param: p_utilDate util.Date型日期
*
* @Return: java.sql.Time sql.Time型日期
*/
public static java.sql.Time toSqlTimeFromUtilDate(java.util.Date p_utilDate) {
java.sql.Time returnDate = null;
if (p_utilDate != null) {
returnDate = new java.sql.Time(p_utilDate.getTime());
}
return returnDate;
}
/**
* util.Date型日期转化sql.Date(时分秒)型日期
*
* @Param: p_utilDate util.Date型日期
*
* @Return: java.sql.Timestamp sql.Timestamp型日期
*/
public static java.sql.Timestamp toSqlTimestampFromUtilDate(
java.util.Date p_utilDate) {
java.sql.Timestamp returnDate = null;
if (p_utilDate != null) {
returnDate = new java.sql.Timestamp(p_utilDate.getTime());
}
return returnDate;
}
/**
* sql.Date型日期转化util.Date型日期
*
* @Param: sqlDate sql.Date型日期
*
* @Return: java.util.Date util.Date型日期
*/
public static java.util.Date toUtilDateFromSqlDate(java.sql.Date p_sqlDate) {
java.util.Date returnDate = null;
if (p_sqlDate != null) {
returnDate = new java.util.Date(p_sqlDate.getTime());
}
return returnDate;
}
// -----------------获取指定日期的年份,月份,日份,小时,分,秒,毫秒----------------------------
/**
* 获取指定日期的年份
*
* @param p_date util.Date日期
*
* @return int 年份
*/
public static int getYearOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.YEAR);
}
/**
* 获取指定日期的月份
*
* @param p_date util.Date日期
*
* @return int 月份
*/
public static int getMonthOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.MONTH) + 1;
}
/**
* 获取指定日期的日份
*
* @param p_date util.Date日期
*
* @return int 日份
*/
public static int getDayOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.DAY_OF_MONTH);
}
/**
* 获取指定日期的小时
*
* @param p_date util.Date日期
*
* @return int 日份
*/
public static int getHourOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.HOUR_OF_DAY);
}
/**
* 获取指定日期的分钟
*
* @param p_date util.Date日期
*
* @return int 分钟
*/
public static int getMinuteOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.MINUTE);
}
/**
* 获取指定日期的秒钟
*
* @param p_date util.Date日期
*
* @return int 秒钟
*/
public static int getSecondOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.get(java.util.Calendar.SECOND);
}
/**
* 获取指定日期的毫秒
*
* @param p_date util.Date日期
*
* @return long 毫秒
*/
public static long getMillisOfDate(java.util.Date p_date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(p_date);
return c.getTimeInMillis();
}
// -----------------获取当前/系统日期(指定日期格式)-----------------------------------------------------------------------------------
/**
* 获取指定日期格式当前日期的字符型日期
*
* @param p_format 日期格式 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
* 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
*
* @return String 当前时间字符串
*/
public static String getNowOfDateByFormat(String p_format) {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(p_format);
String dateStr = sdf.format(d);
return dateStr;
}
/**
* 获取指定日期格式系统日期的字符型日期
*
* @param p_format 日期格式 格式1:"yyyy-MM-dd" 格式2:"yyyy-MM-dd hh:mm:ss EE"
* 格式3:"yyyy年MM月dd日 hh:mm:ss EE" 说明: 年-月-日 时:分:秒 星期 注意MM/mm大小写
*
* @return String 系统时间字符串
*
*/
public static String getSystemOfDateByFormat(String p_format) {
long time = System.currentTimeMillis();
Date d = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat(p_format);
String dateStr = sdf.format(d);
return dateStr;
}
/**
* 获取字符日期一个月的天数
*
* @param p_date
* @return 天数
* @author zhuqx
*/
public static long getDayOfMonth(Date p_date) throws ParseException {
int year = getYearOfDate(p_date);
int month = getMonthOfDate(p_date) - 1;
int day = getDayOfDate(p_date);
int hour = getHourOfDate(p_date);
int minute = getMinuteOfDate(p_date);
int second = getSecondOfDate(p_date);
Calendar l_calendar = new GregorianCalendar(year, month, day, hour,
minute, second);
return l_calendar.getActualMaximum(l_calendar.DAY_OF_MONTH);
}
// -----------------获取指定月份的第一天,最后一天
// ---------------------------------------------------------------------------
/**
* 获取指定月份的第一天
*
* @param p_strDate 指定月份
*
* @param p_formate 日期格式
*
* @return String 时间字符串
*
*/
public static String getDateOfMonthBegin(String p_strDate, String p_format)
throws ParseException {
java.util.Date date = toUtilDateFromStrDateByFormat(p_strDate, p_format);
return toStrDateFromUtilDateByFormat(date, "yyyy-MM") + "-01";
}
/**
* 获取指定月份的最后一天
*
* @param p_strDate 指定月份
*
* @param p_formate 日期格式
*
* @return String 时间字符串
*
*/
public static String getDateOfMonthEnd(String p_strDate, String p_format)
throws ParseException {
java.util.Date date = toUtilDateFromStrDateByFormat(
getDateOfMonthBegin(p_strDate, p_format), p_format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return toStrDateFromUtilDateByFormat(calendar.getTime(), p_format);
}
/**
* 获取指定日期是星期几
*
* @param p_strDate 指定日期
*
* @param p_format 日期格式
*
* @return String "星期几"字符串
* @throws ParseException
*
*/
public static String getWeek(String p_strDate, String p_format) throws ParseException{
Date myDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(p_format);
myDate = sdf.parse(p_strDate);
SimpleDateFormat s = new SimpleDateFormat("E");
return s.format(myDate);
}
}
package com.ebt.util;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.apache.log4j.Logger;
public class DateUtil extends TimeUtil {
private static final Logger logger = Logger.getLogger(DateUtil.class);
public DateUtil() {
}
// ----------------------日期计算------------------------------
/**
* 是否开始日期在结束日期之前(不包括相等)
*
* @param p_startDate 开始日期
*
* @param p_endDate 结束日期
*
* @return boolean 在结束日期前:ture;否则:false
*
*/
public boolean isStartDateBeforeEndDate(Date p_startDate,
Date p_endDate) throws ParseException {
long l_startTime = getMillisOfDate(p_startDate);
long l_endTime = getMillisOfDate(p_endDate);
return (l_startTime - l_endTime > (long) 0) ? true : false;
}
/**
* 获取2个字符日期的天数差
*
* @param p_startDate
*
* @param p_endDate
*
* @return 天数差
*
*/
public long getDaysOfTowDiffDate(String p_startDate, String p_endDate)
throws ParseException {
Date l_startDate = toUtilDateFromStrDateByFormat(p_startDate,
"yyyy-MM-dd");
Date l_endDate = toUtilDateFromStrDateByFormat(p_endDate, "yyyy-MM-dd");
long l_startTime = getMillisOfDate(l_startDate);
long l_endTime = getMillisOfDate(l_endDate);
long betweenDays = (long) ((l_endTime - l_startTime) / (1000 * 60 * 60 * 24));
return betweenDays;
}
/**
* 获取2个字符日期的周数差
*
* @param p_startDate
*
* @param p_endDate
*
* @return 周数差
*
*/
public long getWeeksOfTowDiffDate(String p_startDate,
String p_endDate) throws ParseException {
return getDaysOfTowDiffDate(p_startDate, p_endDate) / 7;
}
/**
* 获取2个字符日期的月数差
*
* @param p_startDate
*
* @param p_endDate
*
* @return 月数差
*/
public long getMonthsOfTowDiffDate(String p_startDate,
String p_endDate) throws ParseException {
return getDaysOfTowDiffDate(p_startDate, p_endDate) / 30;
}
/**
* 获取2个字符日期的年数差
*
* @param p_startDate
*
* @param p_endDate
*
* @return 年数差
*
*/
public long getYearsOfTowDiffDate(String p_startDate,
String p_endDate) throws ParseException {
return getDaysOfTowDiffDate(p_startDate, p_endDate) / 365;
}
/**
* 在给定的日期基础上添加年,月,日、时,分,秒 例如要再2006-10-21(uitl日期)添加3个月,并且格式化为yyyy-MM-dd格式,
* 这里调用的方式为 addDate(2006-10-21,3,Calendar.MONTH,"yyyy-MM-dd")
*
* @param p_startDate 给定的日期
*
* @param p_count 时间的数量
*
* @param p_field 添加的域
*
* @param p_format 时间转化格式,例如:yyyy-MM-dd hh:mm:ss 或者yyyy-mm-dd等
*
* @return 添加后格式化的时间
*
*/
public String addDate(Date p_startDate, int p_count, int p_field,
String p_format) throws ParseException {
// 年,月,日、时,分,秒
int l_year = getYearOfDate(p_startDate);
int l_month = getMonthOfDate(p_startDate) - 1;
int l_day = getDayOfDate(p_startDate);
int l_hour = getHourOfDate(p_startDate);
int l_minute = getMinuteOfDate(p_startDate);
int l_second = getSecondOfDate(p_startDate);
Calendar l_calendar = new GregorianCalendar(l_year, l_month, l_day,
l_hour, l_minute, l_second);
l_calendar.add(p_field, p_count);
return toStrDateFromUtilDateByFormat(l_calendar.getTime(), p_format);
}
public static void main(String[] args) {
try {
DateUtil du = new DateUtil();
System.out.println(du.getDaysOfTowDiffDate("2010-10-09","2010-10-15"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}