gistfile1.txt package com.digitalchina.common.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Lo
package com.digitalchina.common.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* Created by wanggw on 2016/11/30.
*/
public class DateUtil {
public static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
/** milliiseconds */
public final static long MS = 1;
/** Number of milliseconds in a standard second.
*/
public final static long MILLIS_PER_SECOND = MS * 1000;
/** Number of milliseconds in a standard minute */
public final static long MILLIS_PER_MINUTE = MILLIS_PER_SECOND * 60;
/** Number of milliseconds in a standard hour */
public final static long MILLIS_PER_HOUR = MILLIS_PER_MINUTE * 60;
/** Number of milliseconds in a standard day */
public final static long MILLIS_PER_DAY = MILLIS_PER_HOUR * 24;
/** 标准日期格式 */
public final static String NORM_DATE_PATTERN = "yyyy-MM-dd";
/** 标准时间格式 */
public final static String NORM_TIME_PATTERN = "HH:mm:ss";
/** 标准日期时间格式 */
public final static String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** HTTP头中日期时间格式 */
public final static String HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z";
/** 标准日期(不含时间)格式化器 */
private final static SimpleDateFormat NORM_DATE_FORMAT = new SimpleDateFormat(NORM_DATE_PATTERN);
/** 标准时间格式化器 */
private final static SimpleDateFormat NORM_TIME_FORMAT = new SimpleDateFormat(NORM_TIME_PATTERN);
/** 标准日期时间格式化器 */
private final static SimpleDateFormat NORM_DATETIME_FORMAT = new SimpleDateFormat(NORM_DATETIME_PATTERN);
/** HTTP日期时间格式化器 */
private final static SimpleDateFormat HTTP_DATETIME_FORMAT = new SimpleDateFormat(HTTP_DATETIME_PATTERN, Locale.US);
/**
* 当前时间,格式 yyyy-MM-dd HH:mm:ss
* @return 当前时间的标准形式字符串
*/
public static String now() {
return formatDateTime(new Date());
}
/**
* 当前日期,格式 yyyy-MM-dd
* @return 当前日期的标准形式字符串
*/
public static String today() {
return formatDate(new Date());
}
// ------------------------------------ Format start ----------------------------------------------
/**
* 根据特定格式格式化日期
* @param date 被格式化的日期
* @param format 格式
* @return 格式化后的字符串
*/
public static String format(Date date, String format){
return new SimpleDateFormat(format).format(date);
}
/**
* 格式 yyyy-MM-dd HH:mm:ss
* @param date 被格式化的日期
* @return 格式化后的日期
*/
public static String formatDateTime(Date date) {
// return format(d, "yyyy-MM-dd HH:mm:ss");
return NORM_DATETIME_FORMAT.format(date);
}
/**
* 格式化为Http的标准日期格式
* @param date 被格式化的日期
* @return HTTP标准形式日期字符串
*/
public static String formatHttpDate(Date date) {
// return new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US).format(date);
return HTTP_DATETIME_FORMAT.format(date);
}
/**
* 格式 yyyy-MM-dd
* @param date 被格式化的日期
* @return 格式化后的字符串
*/
public static String formatDate(Date date) {
// return format(d, "yyyy-MM-dd");
return NORM_DATE_FORMAT.format(date);
}
// ------------------------------------ Format end ----------------------------------------------
// ------------------------------------ Parse start ----------------------------------------------
/**
* 将特定格式的日期转换为Date对象
* @param dateString 特定格式的日期
* @param format 格式,例如yyyy-MM-dd
* @return 日期对象
*/
public static Date parse(String dateString, String format){
try {
return (new SimpleDateFormat(format)).parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + format + " error!", e);
}
return null;
}
/**
* 格式yyyy-MM-dd HH:mm:ss
* @param dateString 标准形式的时间字符串
* @return 日期对象
*/
public static Date parseDateTime(String dateString){
try {
return NORM_DATETIME_FORMAT.parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + NORM_DATETIME_FORMAT.toPattern() + " error!", e);
}
return null;
}
/**
* 格式yyyy-MM-dd
* @param dateString 标准形式的日期字符串
* @return 日期对象
*/
public static Date parseDate(String dateString){
try {
return NORM_DATE_FORMAT.parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + NORM_DATE_PATTERN + " error!", e);
}
return null;
}
/**
* 格式HH:mm:ss
* @param timeString 标准形式的日期字符串
* @return 日期对象
*/
public static Date parseTime(String timeString){
try {
return NORM_TIME_FORMAT.parse(timeString);
} catch (ParseException e) {
logger.error("Parse " + timeString + " with format " + NORM_TIME_PATTERN + " error!", e);
}
return null;
}
/**
* 格式:
* 1、yyyy-MM-dd HH:mm:ss
* 2、yyyy-MM-dd
* 3、HH:mm:ss>
* @param dateStr 日期字符串
* @return 日期
*/
public static Date parse(String dateStr) {
int length = dateStr.length();
try {
if(length == DateUtil.NORM_DATETIME_PATTERN.length()) {
return parseDateTime(dateStr);
}else if(length == DateUtil.NORM_DATE_PATTERN.length()) {
return parseDate(dateStr);
}else if(length == DateUtil.NORM_TIME_PATTERN.length()){
return parseTime(dateStr);
}
}catch(Exception e) {
logger.error("Parse " + dateStr + " with format normal error!", e);
}
return null;
}
// ------------------------------------ Parse end ----------------------------------------------
// ------------------------------------ Offset start ----------------------------------------------
/**
* 昨天
* @return 昨天
*/
public static Date yesterday() {
return offsiteDate(new Date(), Calendar.DAY_OF_YEAR, -1);
}
/**
* 上周
* @return 上周
*/
public static Date lastWeek() {
return offsiteDate(new Date(), Calendar.WEEK_OF_YEAR, -1);
}
/**
* 上个月
* @return 上个月
*/
public static Date lastMonth() {
return offsiteDate(new Date(), Calendar.MONTH, -1);
}
/**
* 获取指定日期偏移指定时间后的时间
* @param date 基准日期
* @param calendarField 偏移的粒度大小(小时、天、月等)使用Calendar中的常数
* @param offsite 偏移量,正数为向后偏移,负数为向前偏移
* @return 偏移后的日期
*/
public static Date offsiteDate(Date date, int calendarField, int offsite){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(calendarField, offsite);
return cal.getTime();
}
// ------------------------------------ Offset end ----------------------------------------------
/**
* 判断两个日期相差的时长
* 返回 minuend - subtrahend 的差
* @param subtrahend 减数日期
* @param minuend 被减数日期
* @param diffField 相差的选项:相差的天、小时
* @return 日期差
*/
public static long diff(Date subtrahend, Date minuend, long diffField){
long diff = minuend.getTime() - subtrahend.getTime();
return diff/diffField;
}
/**
* 计时,常用于记录某段代码的执行时间,单位:纳秒
* @param preTime 之前记录的时间
* @return 时间差,纳秒
*/
public static long spendNt(long preTime) {
return System.nanoTime() - preTime;
}
/**
* 计时,常用于记录某段代码的执行时间,单位:毫秒
* @param preTime 之前记录的时间
* @return 时间差,毫秒
*/
public static long spendMs(long preTime) {
return System.currentTimeMillis() - preTime;
}
public static void main(String[] args) {
// System.out.println("now() = [" + now() + "]");
// System.out.println("today() = [" + today() + "]");
// System.out.println("format(Date,String) = [" + format(new Date(),NORM_DATE_PATTERN) + "]");
// System.out.println("formatDateTime(Date) = [" + formatDateTime(new Date()) + "]");
// System.out.println("formatHttpDate(Date) = [" + formatHttpDate(new Date()) + "]");
// System.out.println("formatDate(Date) = [" + formatDate(new Date()) + "]");
// System.out.println("parse(String,String) = [" + parse("2016-11-30",NORM_DATE_PATTERN) + "]");
// System.out.println("parseDateTime(String) = [" + parseDateTime("2016-11-30 14:41:41") + "]");
// System.out.println("parseDate(String) = [" + parseDate("2016-11-30") + "]");
// System.out.println("parseTime(String) = [" + parseTime("14:41:41") + "]");
// System.out.println("parse(String) = [" + parse("2016-11-30 14:41:41") + "]");
// System.out.println("yesterday() = [" + yesterday() + "]");
// System.out.println("lastWeek() = [" + lastWeek() + "]");
// System.out.println("lastMonth() = [" + lastMonth() + "]");
System.out.println(formatDate(offsiteDate(new Date(System.currentTimeMillis()),Calendar.DAY_OF_MONTH,1)));
}
}
