当前位置: 代码迷 >> 综合 >> GregorianCalendar 当地时间以及日期时间函数
  详细解决方案

GregorianCalendar 当地时间以及日期时间函数

热度:10   发布时间:2023-11-26 09:13:47.0

1.时期格式化

public static final String dateTimeFormat = new String("yyyy-MM-dd HH:mm:ss");

public static String getDateString(Date date, String formatString) {
try {
return (date != null) ? new SimpleDateFormat(formatString).format(date) : "";
} catch (Throwable e) {
e.printStackTrace();
return null;
}
}

2.GregorianCalendar

     GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

  GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家/地区是在 1582 年 10 月 15 日创立,在其他国家/地区要晚一些)。详细内容查看JDK

  2.1 获取给定日期当日的00:00:00时间戳,即去除日期中含有的时间数据

public static Date getDateIgnoreTime(Date date) {
GregorianCalendar gday = new GregorianCalendar();
gday.setTime(date);
gday.set(Calendar.HOUR, 0);
gday.set(Calendar.HOUR_OF_DAY, 0);
gday.set(Calendar.MINUTE, 0);
gday.set(Calendar.SECOND, 0);
gday.set(Calendar.MILLISECOND, 0);
return gday.getTime();
}

  2.2 根据天数偏移量计算日期

public static Date getDateAfter(Date date, int days) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(GregorianCalendar.DATE, days);
return calendar.getTime();
}

 2.3 计算两个日期间间隔的天数

     public static final long M_PER_DAY = 1000 * 60 * 60 * 24;

     public static Long computeDateInterval(Date startDate, Date endDate) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long startTime = calendar.getTimeInMillis();


calendar.setTime(endDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long endTime = calendar.getTimeInMillis();


return (endTime - startTime) / M_PER_DAY;

 2.4  校验日期格式是否正确

     public static boolean checkDateValidity(String str, String formatString) {
SimpleDateFormat sdf = new SimpleDateFormat(formatString);
sdf.setLenient(false);
try {
sdf.parse(str);
return true;
} catch (ParseException e) {
return false;
}
}

2.5 校验某日是否在一段日期区间中

  /**
* 校验某日是否在一段日期区间中

* @param CompareDate
*            待比较日期
* @param date1
*            前置日期
* @param date2
*            后置日期
* @return
*/
public static boolean isBetween(Date CompareDate, Date date1, Date date2) {
if (date2.before(date1)) {
Date tmp = date1;
date1 = date2;
date2 = tmp;
}
return !(CompareDate.before(date1) || CompareDate.after(date2));
}

 2.6 日期比较函数

 /**
* 日期比较函数

* @param date1
* @param date2
* @return 比较两个日期的先后, date1>date2返回1, date1==date2返回0, date1<date2返回-1,
*         date1,date2数据错误返回-2 Modification History:
*/
public static int compareDate(Date date1, Date date2) {
if (date1 == null || date2 == null)
return -2;
long temp = java.util.TimeZone.getDefault().getRawOffset();
long result = (date2.getTime() + temp) / M_PER_DAY - (date1.getTime() + temp) / M_PER_DAY;
if (result > 0) {
return -1;
} else if (result < 0) {
return 1;
} else {
return 0;
}
}