经常用到日期相关的转换,所以从网上搜集了一下,自己有根据实际工作中经常用到的几个,进行了整理。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* 处理日期相关
* @author liugang
*
*/
public final class DateUtil {
/**
* 格式YYYY-MM-DD
*/
public static String pattern_Date1="yyyy-MM-dd";
/**
* 格式YYYYMMDD
*/
public static String pattern_Date2="yyyyMMdd";
/**
* 格式YYYY年MM月DD日
*/
public static String pattern_Date4="yyyy年MM月dd日";
/**
* 格式HH:mm:ss
*/
public static String pattern_Time="HH:mm:ss";
/**
* 格式YYYY-MM-DD HH:mm:ss
*/
public static String pattern_DateTime="yyyy-MM-dd HH:mm:ss";
/**
* 将日期转换成字符串
* @param date 待转换日期
* @param pattern 转换成的格式。格式已定义,未定义的自己输入
* @return 格式字符串,输入参数为null或""时返回""
*/
public static String dateToStr(Date date,String pattern) {
if (null == date||pattern==null||pattern.equals("")) {
return "";
}
DateFormat df = null;
try{
df = new SimpleDateFormat(pattern);
}catch (IllegalArgumentException e){
System.out.println("Error-->Date.dateToStr :模式无效"+e.getMessage());
}
String dtStr=df.format(date);
return dtStr;
}
/**
* 将日期字符串转换成日期格式
* @param dtStr 待转换的字符串
* @param pattern 待转换字符串的格式
* @return 转换后的日期,或是null
*/
public static Date strToDate(String dtStr,String pattern) {
Date date=null;
if (dtStr==null||dtStr.equals("")) {
return null;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
date = simpleDateFormat.parse(dtStr);
} catch (ParseException e) {
System.out.println("Error-->Date.strToDate :无法分析指定字符串"+e.getMessage());
}
return date;
}
/**
* 得到当前日期
* @param pattern 返回的日期格式
* @return Date格式的日期
*/
public static Date getNowDate(){
Date date=null;
Calendar calendar=Calendar.getInstance();
date=calendar.getTime();
return date;
}
/**
* 得到当前日期
* @param pattern 返回的日期格式
* @return String 格式日期
*/
public static String getNowDate(String pattern){
Date dt=getNowDate();
String dtStr=dateToStr(dt,pattern);
return dtStr;
}
/**
* 第一个日期与第二个日期间的间隔天数,如果第二个日期大于第一日期,返回负值天数
* @param dtStart 第一日期
* @param dtEnd 第二日起
* @return 日期间隔天数
*/
public static long daysAfter(String dtStart, String dtEnd) {
Calendar calendar = Calendar.getInstance();
DateFormat df = DateFormat.getDateInstance();
long long1 = 0, long2 = 0;
try {
calendar.setTime(df.parse(dtStart));
long1 = calendar.getTimeInMillis();
calendar.setTime(df.parse(dtEnd));
long2 = calendar.getTimeInMillis();
} catch (ParseException e) {
}
return ((long2 - long1) / (24 * 60 * 60 * 1000));
}
/**
* 第一个日期与第二个日期间的间隔天数,如果第二个日期大于第一日期,返回负值天数
* @param dtStart 第一日期
* @param dtEnd 第二日起
* @return 日期间隔天数
*/
public static long daysAfter(Date dtStart, Date dtEnd) {
Calendar calendar = Calendar.getInstance();
long long1 = 0, long2 = 0;
calendar.setTime(dtStart);
long1 = calendar.getTimeInMillis();
calendar.setTime(dtEnd);
long2 = calendar.getTimeInMillis();
return ((long2 - long1) / (24 * 60 * 60 * 1000));
}
/**
* 得到指定日期前多少天或后多少天的日期
* @param dt 开始时间
* @param days 计算的天数(可以为负)
* @return 计算后的日期
*/
public static Date relativeDate(Date dt,long days){
Calendar c = Calendar.getInstance();
c.setTime(dt);
long l=c.getTimeInMillis();
l=l+days * (24 * 60 * 60 * 1000);
c.setTimeInMillis(l);
Date date=c.getTime();
return date;
}
/**
* 得到指定日期前多少秒或后多少秒的日期
* @param dt 开始时间
* @param second 计算的秒数(可以为负)
* @return 计算后的日期
*/
public static Date relativeTime(Date dt,long second){
Calendar c = Calendar.getInstance();
c.setTime(dt);
long l=c.getTimeInMillis();
l=l+second * (60 * 1000);
c.setTimeInMillis(l);
Date date=c.getTime();
return date;
}
/**
* 取得日期所在周的第一天
* @param date 日期
* @return 第一天的日期
*/
public static Date getFirstWeekDay(Date date){
if(date==null){
return null;
}
GregorianCalendar gc = null;
gc = new GregorianCalendar(Locale.CHINA);
gc.setLenient(true);
gc.setFirstDayOfWeek(Calendar.MONDAY);
gc.setTime(date);
gc.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return gc.getTime();
}
/**
* 取得日期所在周的最后一天
* @param date 日期
* @return 最后一天的日期
*/
public static Date getLastWeekDay(Date date){
if(date==null){
return null;
}
GregorianCalendar gc = null;
gc = new GregorianCalendar(Locale.CHINA);
gc.setLenient(true);
gc.setFirstDayOfWeek(Calendar.MONDAY);
gc.setTime(date);
gc.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return gc.getTime();
}
/**
* 取得日期所在月的第一天
* @param date 日期
* @return 第一天的日期
*/
public static Date getFirstMonthDay(Date date){
if(date==null){
return null;
}
GregorianCalendar gc = null;
gc = new GregorianCalendar(Locale.CHINA);
gc.setLenient(true);
gc.setFirstDayOfWeek(Calendar.MONDAY);
gc.setTime(date);
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
gc.add(Calendar.DAY_OF_MONTH, 1 - dayOfMonth);
return gc.getTime();
}
/**
* 取得日期所在月的最后一天
* @param date 日期
* @return 最后一天的日期
*/
public static Date getLastMonthDay(Date date){
if(date==null){
return null;
}
GregorianCalendar gc = null;
gc = new GregorianCalendar(Locale.CHINA);
gc.setLenient(true);
gc.setFirstDayOfWeek(Calendar.MONDAY);
gc.setTime(date);
int dayOfMonth = gc.get(Calendar.DAY_OF_MONTH);
int maxDaysOfMonth = gc.getActualMaximum(Calendar.DAY_OF_MONTH);
gc.add(Calendar.DAY_OF_MONTH, maxDaysOfMonth - dayOfMonth);
return gc.getTime();
}
}