在开发的时候,我们时常需要对日期需要做处理,比如说日期的之间的天数,日期前一个月是几号,日期的各种操作吧,自己就写一个工具类,方便以后的开发的使用。
package com.demo.test1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @since v1.1
* @history
* @see
*/
public class DateUtil {
/**
* 将时间转成"yyyy-MM-dd"格式的字符串
*
* @param date
* 时间
* @return
*
*/
public static String formatToYYYYMMDD(Date date) {
if (date != null) {
return YZYDateFormat.getInstance("yyyy-MM-dd").format(date);
} else {
return "null";
}
}
public static String formatToYYYYMMDDMMHHSS(Date date) {
YZYDateFormat format = YZYDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
return format.format(date);
}
public static Date formatToDayByYYYYMMDDMMHH(String s)
throws ParseException {
YZYDateFormat format = YZYDateFormat.getInstance("yyyy-MM-dd HH:mm");
return format.parse(s);
}
public static String formatToYYYYMMDDMMHHSSSlash(Date date) {
YZYDateFormat format = YZYDateFormat.getInstance("yyyy/MM/dd HH:mm:ss");
return format.format(date);
}
public static String formatToYYYYMMDDSlash(Date date) {
YZYDateFormat format = YZYDateFormat.getInstance("yyyy/MM/dd");
return format.format(date);
}
public static String formatToYMZSlash(Date date) {
YZYDateFormat format = YZYDateFormat.getInstance("yyyy年MM月dd日");
return format.format(date);
}
public static String formatToYMZSMMHHSSSlash(Date date) {
YZYDateFormat format = YZYDateFormat
.getInstance("yyyy年MM月dd日 HH:mm:ss");
return format.format(date);
}
/**
* 返回一个二维数组,单位分别是月和日,代表两个Date之差。 <br>
* 本方法忽略小时和分钟。 <br>
* <br>
* 例: <br>
* 1,2012年6月1日到2012年6月3日,返回值是[0,2] (2天) <br>
* 2,2012年6月15日到2012年8月4日,返回值是[1,20] (1个月零20天) <br>
* 3,2011年11月3日到2013年1月14日,返回值是[14,11] (14个月零11天)
*
* @param olderDate
* 较早的日期
* @param newerDate
* 较晚的日期
* @return
* @throws IllegalPlatformAugumentException
* 当olderDate晚于newerDate时
*/
public static int[] getDateDifferenceInMonthAndDay(Date olderDate,
Date newerDate) {
int[] differenceInMonthAndDay = new int[2];
int years = 0;
int months = 0;
int days = 0;
Calendar older = Calendar.getInstance();
Calendar newer = Calendar.getInstance();
older.setTime(olderDate);
newer.setTime(newerDate);
if (olderDate.getTime() > newerDate.getTime()) {
System.out.println("老日期的时间大于新日期的时间");
} else {
years = newer.get(Calendar.YEAR) - older.get(Calendar.YEAR);
if (years >= 0) {
months = newer.get(Calendar.MONTH) - older.get(Calendar.MONTH)
+ 12 * years;
older.add(Calendar.MONTH, months);
days = newer.get(Calendar.DATE) - older.get(Calendar.DATE);
if (days < 0) {
months = months - 1;
older.add(Calendar.MONTH, -1);
}
days = daysBetween(newer.getTime(), older.getTime());
differenceInMonthAndDay[0] = months;
differenceInMonthAndDay[1] = days;
}
}
return differenceInMonthAndDay;
}
/**
* 取两个Date之间的天数差<br>
* <br>
* 例:newerDate是6月3日,olderDate是5月31日,则应返回3 <br>
* 一个更极端的列子:newerDate是6月3日 00:01,olderDate是6月2日
* 23:59,则应返回1,说明相差一天,即便实际上只差2分钟 <br>
* 此代码来自网上 <br>
* http://blog.csdn.net/rmartin/article/details/1452867
*
* @param newerDate
* @param olderDate
* @return
*/
public static int daysBetween(Date newerDate, Date olderDate) {
Calendar cNow = Calendar.getInstance();
Calendar cReturnDate = Calendar.getInstance();
cNow.setTime(newerDate);
cReturnDate.setTime(olderDate);
setTimeToMidnight(cNow);
setTimeToMidnight(cReturnDate);
long todayMs = cNow.getTimeInMillis();
long returnMs = cReturnDate.getTimeInMillis();
long intervalMs = todayMs - returnMs;
return millisecondsToDays(intervalMs);
}
private static int millisecondsToDays(long intervalMs) {
return (int) (intervalMs / (1000 * 86400));
}
private static void setTimeToMidnight(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
}
/**
* 得到距离当前时间前一个月的时间
*
* @return
*
*/
public static Date getLastMonthDate() {
Calendar lastMonthDate = Calendar.getInstance();
lastMonthDate.add(Calendar.MONTH, -1);
return lastMonthDate.getTime();
}
public static void main(String[] args) {
//把字符串如何转化成一个date
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse("2015-09-01");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int [] number = getDateDifferenceInMonthAndDay(date,new Date());
System.out.println(number);
for (int i=0;i<number.length;i++) {
System.out.println(number[i]+"@@@@@@@@@@@@@@@@@@@@@@@@@");
}
//取两个Date之间的天数的差别
int splite = daysBetween(date,new Date());
System.out.println(splite+"%%%%%%%%%%%%%%%%%%%%");
System.out.println(getLastMonthDate()+"走起");
}
}