package com.shlanbao.tzsc.utils.tools;
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 org.apache.log4j.Logger;
/**
* 日期转换工具类
*
@author Leejean
* @create 2014-6-24 下午04:13:19
*/
public class DateUtil {
private static String GLOBAL_DATE_PATTERN="yyyy-MM-dd HH:mm:ss";
private static Logger log = Logger.getLogger(DateUtil.class);
/**
* 字符串转日期
* @param str 被格式化字符串
* @param pattern 格式化字符,不传入pattern时,本方法采用GLOBAL_DATE_PATTERN格式化
* @return Date
*/
public static Date formatStringToDate(String str,String...pattern) {
Date date = null;
if(str==null||"".equals(str.trim())){
return date;
}
if(pattern.length==0){
pattern=new String[1];
pattern[0]=GLOBAL_DATE_PATTERN;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern[0]);
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 日期转字符串
* @param date 被格式化日期
* @param pattern 格式化字符,不传入pattern时,本方法采用GLOBAL_DATE_PATTERN格式化
* @return String
*/
public static String formatDateToString(Date date, String... pattern) {
try {
if(date==null){
return "";
}
if(pattern.length==0){
pattern=new String[1];
pattern[0]=GLOBAL_DATE_PATTERN;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern[0]);
return sdf.format(date).toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 取得现在的日期及时间
* @param formatLayout 格式化 如:yyyy-MM-dd HH:mm:ss
*
*/
public static String getNowDateTime(String formatLayout) {
java.text.SimpleDateFormat sdf;
if (formatLayout == null || formatLayout.length() <= 0)
sdf = new java.text.SimpleDateFormat(GLOBAL_DATE_PATTERN);
else
sdf = new java.text.SimpleDateFormat(formatLayout);
return (sdf.format(new java.util.Date()));
}
/**
* 根据传过来的Str和格式,格式化str到Date
* @param str 日期
* @param formatLayout 转换格式 如:yyyy-MM-dd HH:mm:ss
* @return Date
* @throws ParseException
*/
public static Date strToDate(String str,String formatLayout){
if (str == null || str.trim().length() < 1)
return null;
SimpleDateFormat df = new SimpleDateFormat(formatLayout);
Date date = null;
try {
date = df.parse(str);
} catch (ParseException e) {
return null;
}
return date;
}
/**
* 根据转过来的date和时间格式,把date转化为指点格式的字符串
* @param dateTime
* @return string
*/
public static String datetoStr(Date date,String dateStr){
if(date==null||"".equals(date)){
return null;
}else{
return new SimpleDateFormat(dateStr).format(date);
}
}
/**
* 将dateFormat格式的time转成toDateFormat格式的时间,返回
* @author luther.zhang
* @param time 时间
* @param dateFormat time 格式 yyyy-MM-dd
* @param toDateFormat 期望转成的格式 yyyyMMdd
* @return
*/
public static String formatStrDate(String time,String dateFormat,String toDateFormat){
if(null!=time&&!"".equals(time.trim())){
time = time.trim();
try {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date date = sdf.parse(time);
sdf = new SimpleDateFormat(toDateFormat);
time = sdf.format(date);
} catch (Exception e) {
if(time.length()>10){
time=time.substring(0,10);
}
}
}else{
time = "";
}
return time;
}
/**
* 返回已添加指定时间间隔的日期
*
* @param interval
* 表示要添加的时间间隔("y":年;"d":天;"m":月;如有必要可以自行增加)
* @param number
* 表示要添加的时间间隔的个数
* @param date
* java.util.Date()
* @param dateFormat
* 返回的日期格式
*
* @return String 默认为yyyy-MM-dd HH:mm:ss.SSS格式的日期字串
* @author pepsi.liao
*/
public static String dateAdd(String interval, int number,
java.util.Date date, String dateFormat) {
String strTmp = "";
if (dateFormat == null || "".equals(dateFormat)) {
dateFormat = "yyyy-MM-dd HH:mm:ss sss";
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
// 加若干年
if (interval.equals("y")) {
int currYear = gc.get(Calendar.YEAR);
gc.set(Calendar.YEAR, currYear + number);
}
// 加若干月
else if (interval.equals("m")) {
int currMonth = gc.get(Calendar.MONTH);
gc.set(Calendar.MONTH, currMonth + number);
}
// 加若干天
else if (interval.equals("d")) {
int currDay = gc.get(Calendar.DATE);
gc.set(Calendar.DATE, currDay + number);
}
// 加若小时
else if (interval.equals("h")) {
int currDay = gc.get(Calendar.HOUR);
gc.set(Calendar.HOUR, currDay + number);
}
// 加若分
else if (interval.equals("f")) {
int currDay = gc.get(Calendar.MINUTE);
gc.set(Calendar.MINUTE, currDay + number);
}
SimpleDateFormat bartDateFormat = new SimpleDateFormat(dateFormat);
strTmp = bartDateFormat.format(gc.getTime());
return strTmp;
}
public static Date dateAdd(String interval, int number,
java.util.Date date) {
String strTmp = "";
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
// 加若干年
if (interval.equals("y")) {
int currYear = gc.get(Calendar.YEAR);
gc.set(Calendar.YEAR, currYear + number);
}
// 加若干月
else if (interval.equals("m")) {
int currMonth = gc.get(Calendar.MONTH);
gc.set(Calendar.MONTH, currMonth + number);
}
// 加若干天
else if (interval.equals("d")) {
int currDay = gc.get(Calendar.DATE);
gc.set(Calendar.DATE, currDay + number);
}
// 加若小时
else if (interval.equals("h")) {
int currDay = gc.get(Calendar.HOUR);
gc.set(Calendar.HOUR, currDay + number);
}
// 加若分
else if (interval.equals("f")) {
int currDay = gc.get(Calendar.MINUTE);
gc.set(Calendar.MINUTE, currDay + number);
}
return gc.getTime();
}
/**
* 把 yyyy-MM-dd HH:mm:ss.SSS的数据转变为long型
* @return
* @throws ParseException
*/
public static long getTime(String strDate,String patten) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat();
format.applyPattern(patten);//"yyyy-MM-dd HH:mm:ss.SSS"
java.util.Date date = format.parse( strDate );
return date.getTime();
}
static protected java.util.Calendar getDateCalendar(
java.util.Calendar calendar, String strDate) throws Exception {
if (strDate != null) {
calendar.set(java.util.Calendar.YEAR, new Integer(strDate
.substring(0, 4)).intValue());
calendar.set(java.util.Calendar.MONTH, new Integer(strDate
.substring(4, 6)).intValue() - 1);
calendar.set(java.util.Calendar.DATE, new Integer(strDate
.substring(6, 8)).intValue());
}
return (calendar);
}
/**
* 计算两个日期所间隔的天数
* @param strDate1 开始的日期
* @param strDate2 结束的日期
* @return int
* 输出结果:
* diff=366
* diff=-2
* diff=0
*
*/
static public int computerDiffDate(String strDate1, String strDate2)
throws Exception {
java.util.Calendar c1 = DateUtil.getDateCalendar(java.util.Calendar
.getInstance(), strDate1);
java.util.Calendar c2 = DateUtil.getDateCalendar(java.util.Calendar
.getInstance(), strDate2);
int day = (int) ((c2.getTime().getTime() - c1.getTime().getTime()) / 86400000);
return (day);
}
/**
*
* @Title: getMonthStartDay
* @Description: 获取月初Date
* @param year
* @param month
* @return Date 返回类型
* @throws
*/
public static Date getMonthStartDay(int year,int month){
Calendar ca =Calendar.getInstance();
ca.set(Calendar.YEAR, year);
ca.set(Calendar.MONTH, month-1);
ca.set(Calendar.DAY_OF_MONTH,1);
return ca.getTime();
}
/**
*
* @Title: getMonthEndDay
* @Description: 获取月末Date
* @param year
* @param month
* @return Date 返回类型
* @throws
*/
public static Date getMonthEndDay(int year,int month){
Date d=getMonthStartDay(year,month);
Calendar ca =Calendar.getInstance();
ca.setTime(d);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
return ca.getTime();
}
/**
* @Title: getMonthStartDay
* @Description: TODO
* @param year
* @param month
* @param formatString
* @return String 返回类型
* @throws
*/
public static String getMonthStartDay(int year,int month,String formatString){
SimpleDateFormat format = new SimpleDateFormat(formatString);
return format.format(getMonthStartDay(year, month));
}
/**
* @Title: getMonthEndDay
* @Description: 返回月末的String格式
* @param year
* @param month
* @param formatString
* @return String 返回类型
* @throws
*/
public static String getMonthEndDay(int year,int month,String formatString){
SimpleDateFormat format = new SimpleDateFormat(formatString);
return format.format(getMonthEndDay(year, month));
}
/**
*
* @Title: dateCal
* @Description: 日期相加
* @param date
* @param num 分钟
* @return Date 返回类型
* @throws
*/
public static Date dateCal(Date date,int num){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//加天
cal.add(Calendar.MINUTE, num);
return cal.getTime();
}
public static Date dateCals(Date date,int num){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//加天
cal.add(Calendar.DAY_OF_MONTH, num);
return cal.getTime();
}
public static void main(String[] args) {
Date d=DateUtil.dateCal(new Date(), 10);
//System.out.println(DateUtil.formatDateToString(d));
DateUtil.dateFormatCal("2015-11-10", 1);
}
public static String getYesterdayf(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String yesterday = new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
return yesterday;
}
/**
* 传日期+多少天
*
* */
public static String dateFormatCal(String titleDate,int num){
try {
SimpleDateFormat sdf=new SimpleDateFormat( "yyyy-MM-dd");
Date date = sdf.parse(titleDate);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,num);//把日期往后增加一天.整数往后推,负数往前移动
date=calendar.getTime(); //这个时间就是日期往后推一天的结果
String putDate = sdf.format(date);
//System.out.println(putDate);
return putDate;
} catch (Exception e) {
System.out.println("wct交接班查询工单一次");
}
return null;
}
/**
* 2个时间差 天.小时.分钟.秒
*
* */
public static String getDistanceTimes(String str1, String str2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date one;
Date two;
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
try {
one = df.parse(str1);
two = df.parse(str2);
long time1 = one.getTime();
long time2 = two.getTime();
long diff ;
if(time1