项目中的订单统计需求,分别是按日,周,月,年统计订单数量及订单总额。其中,遇到了各种时间的获取,下面总结了一些较全的Java获取不同时间以及不同时间格式的相互转换方法。
/**
* 获取当前年
* @return
*/
public static Integer getNowYear() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
/**
* 获取一年的开始时间
* @return
*/
public static Date getBeginDayOfYear() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, getNowYear());
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DATE, 1);
return getDayStartTime(calendar.getTime());
}
/**
* 获取一天的开始时间
* @param d
* @return
*/
public static Timestamp getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d)
calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTimeInMillis());
}
/**
* 获得当天0点时间
* @return
*/
public static Date getTimesmorning() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 获得昨天的0点时间
* @return
*/
public static Date getYesterdaymorning() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(getTimesmorning().getTime() - 3600 * 24 * 1000);
return cal.getTime();
}
/**
* 获得当天24点时间
* @return
*/
public static Date getTimesnight() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 获得本周一0点时间
* @return
*/
public static Date getTimesWeekmorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}
/**
* 获得本周日24点时间
* @return
*/
public static Date getTimesWeeknight() {
Calendar cal = Calendar.getInstance();
cal.setTime(getTimesWeekmorning());
cal.add(Calendar.DAY_OF_WEEK, 7);
return cal.getTime();
}
/**
* 获得本月第一天0点时间
* @return
*/
public static Date getTimesMonthmorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
/**
* 获得本月最后一天24点时间
* @return
*/
public static Date getTimesMonthnight() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 24);
return cal.getTime();
}
/** 默认的格式: yyyy-MM-dd HH:mm:ss */
public static final String FMT_DEFAULT = "yyyy-MM-dd HH:mm:ss";
/**
* 日期格式转为字符串格式[格式:yyyy-MM-dd HH:mm:ss]
* @param date:传入的日期
* @return :String
*/
public static String parseString(Date date) {
SimpleDateFormat simpDateFormat = new SimpleDateFormat(FMT_DEFAULT);
return simpDateFormat.format(date);
}
/**
* 字符串格式转日期
* @param str:传入的字符串
* @return :Date
*/
public static Date parseDate(String str) {
SimpleDateFormat simpDateFormat = new SimpleDateFormat(FMT_DEFAULT);
try {
return simpDateFormat.parse(str);
} catch (ParseException e) {
throw new RuntimeException("日期格式不正确 value[" + str + "]");
}
}