import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具
*
*/
public class DateTimeUtils {
// public static final SimpleDateFormat FORMAT_LONG = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
if (cal1 == null || cal2 == null) return false;
return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1
.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
}
public static boolean isSameDay(Date date1, Date date2) {
if (date1 == null || date2 == null) return false;
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
return isSameDay(cal1, cal2);
}
public static boolean isSameInstant(Date date1, Date date2) {
if (date1 == null || date2 == null) return false;
return date1.getTime() == date2.getTime();
}
public static boolean isSameInstant(Calendar cal1, Calendar cal2) {
if (cal1 == null || cal2 == null) return false;
return cal1.getTime().getTime() == cal2.getTime().getTime();
}
public static Date addYears(Date date, int amount) {
return add(date, Calendar.YEAR, amount);
}
public static Date addMonths(Date date, int amount) {
return add(date, Calendar.MONTH, amount);
}
public static Date addWeeks(Date date, int amount) {
return add(date, Calendar.WEEK_OF_YEAR, amount);
}
public static Date addDays(Date date, int amount) {
return add(date, Calendar.DAY_OF_MONTH, amount);
}
public static Date addHours(Date date, int amount) {
return add(date, Calendar.HOUR_OF_DAY, amount);
}
public static Date addMinutes(Date date, int amount) {
return add(date, Calendar.MINUTE, amount);
}
public static Date addSeconds(Date date, int amount) {
return add(date, Calendar.SECOND, amount);
}
public static Date addMilliseconds(Date date, int amount) {
return add(date, Calendar.MILLISECOND, amount);
}
public static Date add(Date date, int calendarField, int amount) {
if (date == null) throw new IllegalArgumentException("日期不能为空");
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(calendarField, amount);
return c.getTime();
}
public static String today() {
return today("yyyy-MM-dd");
}
public static String now() {
return today("yyyy-MM-dd HH:mm:ss SSS");
}
public static String today(String pattern) {
if (pattern == null) throw new IllegalArgumentException("日期格式不能为空");
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String dt = sdf.format(new Date());
return dt;
}
public static Date parseDate(String src) {
return parse(src, "yyyy-MM-dd");
}
public static Date parseDatetime(String src) {
return parse(src, "yyyy-MM-dd HH:mm:ss");
}
public static Date parse(String src, String pattern) {
if (pattern == null) throw new IllegalArgumentException("日期格式不能为空");
if (src == null) return null;
try {
return new SimpleDateFormat(pattern).parse(src);
} catch (ParseException ex) {
throw new IllegalArgumentException("日期格式转换出错,src=" + src + ",pattern=" + pattern);
}
}
public static String formatDate(Date src) {
return format(src, "yyyy-MM-dd");
}
public static String formatDatetime(Date src) {
return format(src, "yyyy-MM-dd HH:mm:ss");
}
public static String format(Date src, String pattern) {
if (pattern == null) throw new IllegalArgumentException("日期格式不能为空");
if (src == null) return null;
return new SimpleDateFormat(pattern).format(src);
}
public static int getLastDayOfMonth(int y, int m) {
boolean IsLeapYear = (y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0);
int days = 0;
switch (m) {
case 2:
if (IsLeapYear) {
days = 29;
} else days = 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
return days;
}
/**
* 中文星期几
*
* @return
*/
public static String getCnWeekDay() {
return getCnWeekDay(new Date());
}
/**
* 中文星期几
*
* @return
*/
public static String getCnWeekDay(Date date) {
String[] weekDays = {"日", "一", "二", "三", "四", "五", "六"};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) w = 0;
return "星期" + weekDays[w];
}
/**
* 获取当月的第一天
* @return
*/
public static Date getFirstDateOfCurrentMonth() {
Calendar instance = Calendar.getInstance();
instance.setTime(new Date());
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH);
instance.set(year, month, 1, 0, 0, 0);
return instance.getTime();
}
public static Date getFirstDateOfCurrentYear() {
Calendar instance = Calendar.getInstance();
instance.setTime(new Date());
int year = instance.get(Calendar.YEAR);
instance.set(year, Calendar.JANUARY, 1, 0, 0, 0);
return instance.getTime();
}
/**
* 获取两个日期之间的天数(两个字符串)
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 获取两个日期之间的天数(字符串与date)
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(String smdate,Date bdate) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 获取两个日期之间的天数(字符串与date)
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(Date smdate, String bdate) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(bdate));
long time1 = cal.getTimeInMillis();
cal.setTime(smdate);
long time2 = cal.getTimeInMillis();
long between_days=(time1-time2)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 将毫秒转化(转换成*天*小时*分钟*秒)
* @param millis
* @return
* @throws ParseException
*/
public static String parse(long millis) throws ParseException {
long days = millis / (1000 * 60 * 60 * 24);
long hours = (millis % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (millis % (1000 * 60 * 60)) / (1000 * 60);
long secs = (millis % (1000 * 60)) / (1000);
String day = days==0l?"":days+"天";
String hour = hours==0l?"":hours+"小时";
String minute = minutes==0l?"":minutes+"分钟";
String sec = secs==0l?"":secs+"秒";
return day+hour+minute+sec;
}
public static void main(String[] args) {
System.out.println(format(getFirstDateOfCurrentYear(), "yyyy-MM-dd HH:mm:ss"));
}
}