您的位置:首页 > 编程语言 > Java开发

java日期处理代码

2018-01-25 09:48 302 查看
下面的代码封装了一系列日期处理的方法,大家看看有没有用得上的,有需要的话就拿去用吧!

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* @author vita小马哥
* @date 2018年1月25日 上午9:24:19
* Date日期处理工具类
*/
public class DateUtils {

/**
* 获取指定格式的日期
* @param format 日期格式(如yyyy-MM-dd HH:mm:ss)
* @return String格式的日期
* @throws Exception
*/
public static String getFormatDate(String format){
SimpleDateFormat sdfDays = new SimpleDateFormat(format);
return sdfDays.format(new Date());
}

/**
* 转换日期格式
* @param date 日期
* @param format 日期格式(如yyyy-MM-dd HH:mm:ss)
* @return String格式的日期
* @throws Exception
*/
public static String formatDate(Date date, String format){
SimpleDateFormat sdfDays = new SimpleDateFormat(format);
return sdfDays.format(date);
}

/**
* 得到n天之后的日期
* @param days
* @param format
* @return
*/
public static String getAfterDayDate(String days,String format){

int daysInt = Integer.parseInt(days);

Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();

SimpleDateFormat sdfd = new SimpleDateFormat(format);
String dateStr = sdfd.format(date);

return dateStr;
}

/**
* 比较两个日期的大小
*
* @param startDate 开始时间
* @param endDate 结束时间
* @return true : 结束时间 > 开始时间
*/
public static boolean dateCompare(Date startDate, Date endDate) {
boolean dateComPareFlag = true;
if (endDate.compareTo(startDate) != 1) {
dateComPareFlag = false;
}
return dateComPareFlag;
}

/**
* @Title: compareDate
* @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
* @param s
* @param e
* @return boolean
* @throws
* @author luguosui
*/
public static boolean compareDate(String s, String e,String format) {

Date sd = fomatDate(s,format);
Date ed = fomatDate(e,format);

if(sd == null||ed == null){
return false;
}
return sd.getTime() >= ed.getTime();
}

/**
* 格式化日期
*
* @return
*/
public static Date fomatDate(String date,String format) {
DateFormat fmt = new SimpleDateFormat(format);
try {
return fmt.parse(date);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}

/**
* 计算两个时间之间相差的分钟数,“结束时间”减去“开始时间”之间的分钟数.
*
* @param beginTime 开始时间
* @param endTime 结束时间
* @return int 分钟数。小于0:开始时间大于结束时间 大于0:开始时间小于结束时间
*/
public static long calMinutes(Date beginTime, Date endTime) {
if (beginTime == null || endTime == null) {
return 0;
}
long diff = endTime.getTime() - beginTime.getTime();
return Math.abs(diff / (60 * 1000));
}

/**
* 计算两个日期的时间差 返回具体的天数
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return int : 天数
*/
public static int secondsBetween(Date startTime, Date endTime) {
if (startTime == null || endTime == null) {
return 0;
}
return (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24));
}

/**
* 根据生日计算当前年龄.
* <p>准确到天,比如:<br/>
* 当前时间为 2008-06-17 ,生日为 1982-06-16 ,计算结果为 26<br/>
* 当前时间为 2008-06-17 ,生日为 1982-06-17 ,计算结果为 26<br/>
* 当前时间为 2008-06-17 ,生日为 1982-06-18 ,计算结果为 25<br/>
* </p>
*
* @
4000
param birthDay 必须是一个 Date 对象,否则直接返回 0
* @return int : 年龄
*/
public static int getAge(Object birthDay) {
Date aDate = null;
if (birthDay instanceof Date) {
aDate = (Date) birthDay;
}
if (aDate != null) {
Calendar today = Calendar.getInstance();
Calendar birthday = Calendar.getInstance();
birthday.setTime(aDate);
int yearTotal = today.get(Calendar.YEAR) - birthday.get(Calendar.YEAR);
int bDay = today.get(Calendar.DAY_OF_YEAR) - birthday.get(Calendar.DAY_OF_YEAR);
//not yet match 1 round age, minus one year
if (bDay < 0) {
yearTotal = yearTotal - 1;
}
return yearTotal;
}
return 0;
}

/**
* 根据年龄,得到的生日日期
*
* @param age 年龄
* @return 生日日期
*/
public static Date getBirthDay(int age) {
GregorianCalendar gc = new GregorianCalendar();
int currYear = gc.get(Calendar.YEAR);
gc.set(Calendar.YEAR, currYear - age);
Date birthDate = new Date(gc.getTime().getTime());//精确到天,haidong.zhou edit 2006-07-14
return birthDate;
}

/**
* 日期 转 字符串
*
* @param date 日期
* @param patten 字符串格式
* @return str
*/
public static String parseToFormatDateString(Date date, String patten) {
if (date == null || StringUtils.isBlank(patten)) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(patten);
return format.format(date);
}

/**
* 字符串 转 日期
*
* @param dateStr 日期格式字符串
* @param dateFmt 转换格式
* @return
* @throws ParseException If the string and the format is not match, exception will be thrown
*/
public static Date toUtilDate(String dateStr, String dateFmt) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat(dateFmt);
return format.parse(dateStr.trim());
}

/**
* 明天日期
*
* @param date Date
* @return Date
*/
public static Date getTomorrow(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 1);
return cal.getTime();
}

/**
* 判断 date是否大于等于开始日期,小于等于结束日期
*
* @param date 指定某个日期
* @param from 开始日期
* @param to 结束日期
* @return
* @author: zhanghailang
*/
public static boolean isDateInRange(Date date, Date from, Date to) {
if ((date.after(from) && date.before(to)) || date.compareTo(from) == 0 || date.compareTo(to) == 0) {
return true;
}
return false;
}

/**
* 获取当天日期
*
* @return Date
*/
public static Date getDate() {
Calendar cal = Calendar.getInstance();
return cal.getTime();
}

/**
* 在日期上添加多几个月,并返回日期.
*
* @param date - 日期
* @param amount - 添加多少月
* @return date
*/
public static Date addMonth(Date date, int amount) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, amount);
return cal.getTime();
}

/**
* 计算两个时间之间相差的分钟数,“结束时间”减去“开始时间”之间的分钟数.
*
* @param beginTime 开始时间
* @param endTime 结束时间
* @return int 分钟数。如果开始时间或者结束时间为 null 的话,返回 0 。
*/
public static int minutesBetween(Date beginTime, Date endTime) {
if (beginTime == null || endTime == null) {
return 0;
}
long diff = endTime.getTime() - beginTime.getTime();
return (int) diff / (60 * 1000);
}

/**
* 当天日期向前推多少天
*
* @param day
* @return Date
*/
public final static Date getBeforeDateTime(int day) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -day);
return calendar.getTime();
}

/**
* 根据日期 得到 这周的 星期天
*
* @param day 日期
* @param hmsFlag true: 时分秒为0 ,flase : 时分秒为23:59:59
* @return Date
*/
public final static Date getWeekDayToSunday(Date day, boolean hmsFlag) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.SUNDAY);

if (hmsFlag) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
} else {
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
}
return calendar.getTime();
}

/**
* 根据日期 得到 这周的 星期一
*
* @param day 日期
* @param hmsFlag true: 时分秒为0 ,flase : 时分秒为23:59:59
* @return Date
*/
public final static Date getWeekDayToMonday(Date day, boolean hmsFlag) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.MONDAY);

if (hmsFlag) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
} else {
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
}
return calendar.getTime();
}

/**
* 根据日期 得到 这周的 星期天
*
* @param day 日期
* @return Date
*/
public final static Date getWeekDayToSunday(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.SUNDAY);
return calendar.getTime();
}

/**
* 根据日期 得到 本月的第一天
*
* @return Date
*/
public final static Date getMonthDayToFirstDay(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.setFirstDayOfWeek(GregorianCalendar.MONDAY);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}

/**
* 计算时间差 精确到秒
*
* @param beginTime 开始时间
* @param endTime 结束时间
* @return 秒数
*/
public static int callSecond(Date beginTime, Date endTime) {
long beetween = endTime.getTime() - beginTime.getTime();
long day = beetween / (24 * 60 * 60 * 1000);
long hour = (beetween / (60 * 60 * 1000) - (beetween / (24 * 60 * 60 * 1000)) * 24);
long min = ((beetween / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (beetween / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
//System.out.println(day + "天" + hour + "小时" + min + "分" + s + "秒");
long d = day * 24 * 60 * 60;
long h = hour * 60 * 60;
long m = min * 60;
return (int) (d + h + m + s);
}

/**
* 当前日期添加多少分钟后的时间
*
* @param date - 时间
* @param minute - 添加多少分钟
* @return date
* @deprecated 请用addMinute替换
*/
@Deprecated
public static Date subtractMinute(Date date, int minute) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, minute);
return cal.getTime();
}

/**
* 当前日期的年份
*
* @param date -日期
* @return int:年份
*/
public static Integer getYear(Date date) {
if (null == date) {
return 0;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}

/**
* 计算两个时间之间的小时数,精确到秒。
* <p>比如:2008-07-10 17:41:01 和 2008-07-11 17:41:01 之间相差为 24 个小时。</p>
* <p>比如:2008-07-10 17:41:01 和 2008-07-11 17:41:00 之间相差为 23 个小时。</p>
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return int : 小时数
*/
public static double compareHours(Date startTime, Date endTime) {
if (startTime == null || endTime == null) {
return 0;
}

long between = (endTime.getTime() - startTime.getTime()) / 1000; //秒
long day1 = between / (24 * 3600);
long hour1 = between % (24 * 3600) / 3600;
long minute1 = between % 3600 / 60;
long second1 = between % 60 / 60;
//System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
double hour2 = (double) minute1 / 60;
double v = (double) hour1 + hour2;
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
return Double.parseDouble(df.format(v));
}

/**
* 某年某月的第一天
*
* @param year int 年份
* @param month int 月份
*/
public static Date getFristDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}

/**
* 某年某月的最后一天
*
* @param year int 年份
* @param month int 月份
*/
public static Date getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: