import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
/**
* yyyy年MM月dd日 hh时mm分ss秒 12小时制
*/
public static String FORMAT_1="yyyy年MM月dd日 hh时mm分ss秒";//12小时制
/**
* yyyy-MM-dd HH:mm:ss" 12小时制
*/
public static String FORMAT_2="yyyy-MM-dd hh:mm:ss";//12小时制
/**
* yyyy-MM-dd HH:mm:ss" 24小时制
*/
public static String FORMAT_3="yyyy-MM-dd HH:mm:ss";
/**
* yyyyMMddHHmmss" 24小时制
*/
public static String FORMAT_9="yyyyMMddHHmmss";
/**
* yyyyMMddHHmmss" 24小时制
*/
public static String FORMAT_11="yyyyMMddHHmmss";
/**
* yyyy-MM-dd
*/
public static String FORMAT_4="yyyy-MM-dd";
/**
* yyyy/MM/dd
*/
public static String FORMAT_5="yyyy/MM/dd";
/**
* yyyy-MM
*/
public static String FORMAT_6="yyyy-MM";
/**
* hh:mm:ss 12小时制
*/
public static String FORMAT_7="hh:mm:ss";//12小时制
/**
* HH:mm:ss 24小时制
*/
public static String FORMAT_8="HH:mm:ss";//24小时制
/**
* yyyyMMdd
*/
public static String FORMAT_10 = "yyyyMMdd";
/**
* yyyy年MM月dd日
*/
public static String FORMAT_12="yyyy年MM月dd日";
/**字符串转换为时间类型
* @param dateStr
* @param format
* @return
*/
public static Date parseDate(String dateStr, String format) {
Date date = null;
DateFormat dateFormat = null;
try {
dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 获取两个日期相差的月数
* @param d2 较大的日期 如:2016-6-1
* @param d1 较小的日期 如:2015-3-30
* @return 如果d1>d2返回 月数差 否则返回0
*/
public static int getMonthDiff(Date d2,Date d1)throws ParseException {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
//判断两个日期的大小
if(c2.getTimeInMillis() < c1.getTimeInMillis()) return 0;
int year1 = c1.get(Calendar.YEAR);
int year2 = c2.get(Calendar.YEAR);
int month1 = c1.get(Calendar.MONTH);
int month2 = c2.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
int day2 = c2.get(Calendar.DAY_OF_MONTH);
// 获取年的差值 假设 d1 = 2015-9-30 d2 = 2015-12-16
int yearInterval = year2 - year1;
// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
if(month2 < month1 || month1 == month2 && day2 < day1){
yearInterval --;
}
// 获取月数差值
int monthInterval = (month2 + 12) - month1 ;
if(day2 > day1) {
monthInterval ++;
}
if(monthInterval==12){//如果等于12个月直接返回
return monthInterval;
}else{
monthInterval %= 12;
return yearInterval * 12 + monthInterval;
}
}
/**
* 将时间转换为指定格式的字符串
* @param date
* @param format
* @return
*/
public static String parseString(Object obj, String format) {
if(obj == null) return "";
Date date = null;
if(obj instanceof Date) {
date = (Date)obj;
} else {
return obj.toString();
}
return parseString(date, format);
}
/**
* 将时间转换为指定格式的字符串
* @param date
* @param format
* @return
*/
public static String parseString(Date date, String format) {
String dateStr = null;
DateFormat dateFormat = null;
if(date == null) return "";
if (format == null || format=="") {
format =FORMAT_3;
}
dateFormat = new SimpleDateFormat(format);
dateStr = dateFormat.format(date);
return dateStr;
}
/**获取指定时间的年份
* @param date
* @return
*/
public static int getYear(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**获取指定时间的月份
* @param date
* @return
*/
public static int getMonth(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 获取指定时间的日期
* @param date
* @return
*/
public static int getDay(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**获取指定时间的小时
* @param date
* @return
*/
public static int getHour(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.HOUR_OF_DAY);
}
/**获取指定时间的分钟
* @param date
* @return
*/
public static int getMinute(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MINUTE);
}
/**获取指定时间的秒
* @param date
* @return
*/
public static int getSecond(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.SECOND);
}
/**获取指定时间的毫秒值
* @param date
* @return
*/
public static long getMillis(Date date) {
Calendar calendar = null;
calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getTimeInMillis();
}
/**获取指定时间多少天以后的日期
* @param date
* @param day
* @return
*/
public static Date addDate(Date date, int day) {
Calendar calendar = null;
calendar = Calendar.getInstance();
long millis = getMillis(date) + ((long) day) * 24 * 3600 * 1000;
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
/**获取指定时间多少天以前的日期
* @param date
* @param day
* @return
*/
public static Date beforeDate(Date date, int day) {
Calendar calendar = null;
calendar = Calendar.getInstance();
long millis = getMillis(date) - ((long) day) * 24 * 3600 * 1000;
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
/**
* 获取两个时间的间隔天数
* @param date
* @param date1
* @return
*/
public static int diffDate(Date date, Date date1) {
return (int) (((date.getTime() - date1.getTime()) / (24 * 3600 * 1000)));
}
/**
* 获取两个时间的间隔小时数
* @param date
* @param date1
* @return
*/
public static int diffHour(Date date, Date date1) {
long diff = date.getTime() - date1.getTime();
int time = 3600 * 1000; // 一个小时有多少秒
return (int) (diff / time);
}
/**
* 获取两个时间的间隔秒数
* @param date
* @param date1
* @return
*/
public static int diffSecond(Date date, Date date1) {
long diff = date.getTime() - date1.getTime();
int time = 1000; // 一个小时有多少秒
return (int) (diff / time);
}
/**获取某月的第一天
* @param strdate (yyyy-MM)
* @return yyyy-MM-dd
*/
public static String getMonthBegin(String strdate) {
Date date = null;
date = parseDate(strdate, DateUtil.FORMAT_6);
return parseString(date, DateUtil.FORMAT_6) + "-01";
}
/**获取某月的最后一天
* @param strdate (yyyy-MM)
* @return yyyy-MM-dd
*/
public static String getMonthEnd(String strdate) {
Calendar calendar = null;
Date date = null;
date = parseDate(getMonthBegin(strdate), DateUtil.FORMAT_6);
calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return parseString(calendar.getTime(), DateUtil.FORMAT_3);
}
/**
* 获取当前时间的时间戳,从最后位置开始截取对应以供形成订单号,和订单明细的主键
* @return
*/
public static long getTimeSeconds(int index){
long time_seconds =0l;
Date date = new Date();
long long_time=date.getTime();
int len = (long_time+"").length();
time_seconds = Long.parseLong(String.valueOf(long_time).substring(len-index, len));
return time_seconds;
}
/**
* 取当前时间
* @return
*/
public static Date getDatetime() {
Calendar c = Calendar.getInstance();//获得系统当前日期
return c.getTime();
}
/**
* 从前到后依次排序
* @param dates
* @return
*/
public static Date[] buffSort(Date[] dates) {
Date temp;
for(int i=0;i<dates.length;i++){//趟数
for(int j=0;j<dates.length-i-1;j++){//比较次数
if (dates[j].after(dates[j + 1])) {
temp = dates[j];
dates[j] = dates[j + 1];
dates[j + 1] = temp;
}
}
}
return dates;
}
/**
* 格式化string类型的时间
* yyyy年MM月dd日
* @param string date
* @return string
*/
public static String formatStringDate(String date){
String formatDate = "";
String[] dateStrings = date.substring(0, 10).split("\\-");
formatDate = dateStrings[0]+"年"+dateStrings[1]+"月"+dateStrings[2]+"日";
return formatDate;
}
}