Java日期工具类DateUtils实例详解

在项目开发中,日期是我们必不可少的的一部分,本文将总结代码开发中的关于日期常用的一些方法,以方便自己后期使用。下面直接上菜了:

package com.example.util; 

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List; 

/**
 * 日期常用方法
 *
 * @author
 *
 */
public class DateUtils { 

  /**
   * 常用变量
   */
  public static final String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
  public static final String DATE_FORMAT_YMD = "yyyy-MM-dd";
  public static final String DATE_FORMAT_HMS = "HH:mm:ss";
  public static final String DATE_FORMAT_HM = "HH:mm";
  public static final String DATE_FORMAT_YMDHM = "yyyy-MM-dd HH:mm";
  public static final String DATE_FORMAT_YMDHMS = "yyyyMMddHHmmss";
  public static final long ONE_DAY_MILLS = 3600000 * 24;
  public static final int WEEK_DAYS = 7;
  private static final int dateLength = DATE_FORMAT_YMDHM.length(); 

  /**
   * 日期转换为制定格式字符串
   *
   * @param time
   * @param format
   * @return
   */
  public static String formatDateToString(Date time, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    return sdf.format(time);
  } 

  /**
   * 字符串转换为制定格式日期
   * (注意:当你输入的日期是2014-12-21 12:12,format对应的应为yyyy-MM-dd HH:mm
   * 否则异常抛出)
   * @param date
   * @param format
   * @return
   * @throws ParseException
   *       @
   */
  public static Date formatStringToDate(String date, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    try {
      return sdf.parse(date);
    } catch (ParseException ex) {
      ex.printStackTrace();
      throw new RuntimeException(ex.toString());
    }
  } 

  /**
   * 判断一个日期是否属于两个时段内
   * @param time
   * @param timeRange
   * @return
   */
  public static boolean isTimeInRange(Date time, Date[] timeRange) {
    return (!time.before(timeRange[0]) && !time.after(timeRange[1]));
  } 

  /**
   * 从完整的时间截取精确到分的时间
   *
   * @param fullDateStr
   * @return
   */
  public static String getDateToMinute(String fullDateStr) {
    return fullDateStr == null ? null
        : (fullDateStr.length() >= dateLength ? fullDateStr.substring(
            0, dateLength) : fullDateStr);
  } 

  /**
   * 返回指定年度的所有周。List中包含的是String[2]对象 string[0]本周的开始日期,string[1]是本周的结束日期。
   * 日期的格式为YYYY-MM-DD 每年的第一个周,必须包含星期一且是完整的七天。
   * 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 星期一在哪一年,那么包含这个星期的周就是哪一年的周。
   * 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。
   *
   * @param year
   *      格式 YYYY ,必须大于1900年度 小于9999年
   * @return @
   */
  public static List<String[]> getWeeksByYear(final int year) {
    int weeks = getWeekNumOfYear(year);
    List<String[]> result = new ArrayList<String[]>(weeks);
    int start = 1;
    int end = 7;
    for (int i = 1; i <= weeks; i++) {
      String[] tempWeek = new String[2];
      tempWeek[0] = getDateForDayOfWeek(year, i, start);
      tempWeek[1] = getDateForDayOfWeek(year, i, end);
      result.add(tempWeek);
    }
    return result;
  } 

  /**
   * 计算指定年、周的上一年、周
   *
   * @param year
   * @param week
   * @return @
   */
  public static int[] getLastYearWeek(int year, int week) {
    if (week <= 0) {
      throw new IllegalArgumentException("周序号不能小于1!!");
    }
    int[] result = { week, year };
    if (week == 1) {
      // 上一年
      result[1] -= 1;
      // 最后一周
      result[0] = getWeekNumOfYear(result[1]);
    } else {
      result[0] -= 1;
    }
    return result;
  } 

  /**
   * 下一个[周,年]
   *
   * @param year
   * @param week
   * @return @
   */
  public static int[] getNextYearWeek(int year, int week) {
    if (week <= 0) {
      throw new IllegalArgumentException("周序号不能小于1!!");
    }
    int[] result = { week, year };
    int weeks = getWeekNumOfYear(year);
    if (week == weeks) {
      // 下一年
      result[1] += 1;
      // 第一周
      result[0] = 1;
    } else {
      result[0] += 1;
    }
    return result;
  } 

  /**
   * 计算指定年度共有多少个周。(从周一开始)
   *
   * @param year
   * @return @
   */
  public static int getWeekNumOfYear(final int year) {
    return getWeekNumOfYear(year, Calendar.MONDAY);
  } 

  /**
   * 计算指定年度共有多少个周。
   *
   * @param year
   *      yyyy
   * @return @
   */
  public static int getWeekNumOfYear(final int year, int firstDayOfWeek) {
    // 每年至少有52个周 ,最多有53个周。
    int minWeeks = 52;
    int maxWeeks = 53;
    int result = minWeeks;
    int sIndex = 4;
    String date = getDateForDayOfWeek(year, maxWeeks, firstDayOfWeek);
    // 判断年度是否相符,如果相符说明有53个周。
    if (date.substring(0, sIndex).equals(year)) {
      result = maxWeeks;
    }
    return result;
  } 

  public static int getWeeksOfWeekYear(final int year) {
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setMinimalDaysInFirstWeek(WEEK_DAYS);
    cal.set(Calendar.YEAR, year);
    return cal.getWeeksInWeekYear();
  } 

  /**
   * 获取指定年份的第几周的第几天对应的日期yyyy-MM-dd(从周一开始)
   *
   * @param year
   * @param weekOfYear
   * @param dayOfWeek
   * @return yyyy-MM-dd 格式的日期 @
   */
  public static String getDateForDayOfWeek(int year, int weekOfYear,
      int dayOfWeek) {
    return getDateForDayOfWeek(year, weekOfYear, dayOfWeek, Calendar.MONDAY);
  } 

  /**
   * 获取指定年份的第几周的第几天对应的日期yyyy-MM-dd,指定周几算一周的第一天(firstDayOfWeek)
   *
   * @param year
   * @param weekOfYear
   * @param dayOfWeek
   * @param firstDayOfWeek
   *      指定周几算一周的第一天
   * @return yyyy-MM-dd 格式的日期
   */
  public static String getDateForDayOfWeek(int year, int weekOfYear,
      int dayOfWeek, int firstDayOfWeek) {
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(firstDayOfWeek);
    cal.set(Calendar.DAY_OF_WEEK, dayOfWeek);
    cal.setMinimalDaysInFirstWeek(WEEK_DAYS);
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, weekOfYear);
    return formatDateToString(cal.getTime(), DATE_FORMAT_YMD);
  } 

  /**
   * 获取指定日期星期几
   *
   * @param datetime
   * @throws ParseException
   *       @
   */
  public static int getWeekOfDate(String datetime) throws ParseException {
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setMinimalDaysInFirstWeek(WEEK_DAYS);
    Date date = formatStringToDate(datetime, DATE_FORMAT_YMD);
    cal.setTime(date);
    return cal.get(Calendar.DAY_OF_WEEK); 

  } 

  /**
   * 计算某年某周内的所有日期(从周一开始 为每周的第一天)
   *
   * @param yearNum
   * @param weekNum
   * @return @
   */
  public static List<String> getWeekDays(int yearNum, int weekNum) {
    return getWeekDays(yearNum, weekNum, Calendar.MONDAY);
  } 

  /**
   * 计算某年某周内的所有日期(七天)
   *
   * @param yearNum
   * @param weekNum
   * @return yyyy-MM-dd 格式的日期列表
   */
  public static List<String> getWeekDays(int year, int weekOfYear,
      int firstDayOfWeek) {
    List<String> dates = new ArrayList<String>();
    int dayOfWeek = firstDayOfWeek;
    for (int i = 0; i < WEEK_DAYS; i++) {
      dates.add(getDateForDayOfWeek(year, weekOfYear, dayOfWeek++,
          firstDayOfWeek));
    }
    return dates;
  } 

  /**
   * 获取目标日期的上周、或本周、或下周的年、周信息
   *
   * @param queryDate
   *      传入的时间
   * @param weekOffset
   *      -1:上周 0:本周 1:下周
   * @param firstDayOfWeek
   *      每周以第几天为首日
   * @return
   * @throws ParseException
   */
  public static int[] getWeekAndYear(String queryDate, int weekOffset,
      int firstDayOfWeek) throws ParseException { 

    Date date = formatStringToDate(queryDate, DATE_FORMAT_YMD);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.setFirstDayOfWeek(firstDayOfWeek);
    calendar.setMinimalDaysInFirstWeek(WEEK_DAYS);
    int year = calendar.getWeekYear();
    int week = calendar.get(Calendar.WEEK_OF_YEAR);
    int[] result = { week, year };
    switch (weekOffset) {
    case 1:
      result = getNextYearWeek(year, week);
      break;
    case -1:
      result = getLastYearWeek(year, week);
      break;
    default:
      break;
    }
    return result;
  } 

  /**
   * 计算个两日期的天数
   *
   * @param startDate
   *      开始日期字串
   * @param endDate
   *      结束日期字串
   * @return
   * @throws ParseException
   */
  public static int getDaysBetween(String startDate, String endDate)
      throws ParseException {
    int dayGap = 0;
    if (startDate != null && startDate.length() > 0 && endDate != null
        && endDate.length() > 0) {
      Date end = formatStringToDate(endDate, DATE_FORMAT_YMD);
      Date start = formatStringToDate(startDate, DATE_FORMAT_YMD);
      dayGap = getDaysBetween(start, end);
    }
    return dayGap;
  } 

  private static int getDaysBetween(Date startDate, Date endDate) {
    return (int) ((endDate.getTime() - startDate.getTime()) / ONE_DAY_MILLS);
  } 

  /**
   * 计算两个日期之间的天数差
   * @param startDate
   * @param endDate
   * @return
   */
  public static int getDaysGapOfDates(Date startDate, Date endDate) {
    int date = 0;
    if (startDate != null && endDate != null) {
      date = getDaysBetween(startDate, endDate);
    }
    return date;
  } 

  /**
   * 计算两个日期之间的年份差距
   *
   * @param firstDate
   * @param secondDate
   * @return
   */ 

  public static int getYearGapOfDates(Date firstDate, Date secondDate) {
    if (firstDate == null || secondDate == null) {
      return 0;
    }
    Calendar helpCalendar = Calendar.getInstance();
    helpCalendar.setTime(firstDate);
    int firstYear = helpCalendar.get(Calendar.YEAR);
    helpCalendar.setTime(secondDate);
    int secondYear = helpCalendar.get(Calendar.YEAR);
    return secondYear - firstYear;
  } 

  /**
   * 计算两个日期之间的月份差距
   *
   * @param firstDate
   * @param secondDate
   * @return
   */
  public static int getMonthGapOfDates(Date firstDate, Date secondDate) {
    if (firstDate == null || secondDate == null) {
      return 0;
    } 

    return (int) ((secondDate.getTime() - firstDate.getTime())
        / ONE_DAY_MILLS / 30); 

  } 

  /**
   * 计算是否包含当前日期
   *
   * @param datys
   * @return
   */
  public static boolean isContainCurrent(List<String> dates) {
    boolean flag = false;
    SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT_YMD);
    Date date = new Date();
    String dateStr = fmt.format(date);
    for (int i = 0; i < dates.size(); i++) {
      if (dateStr.equals(dates.get(i))) {
        flag = true;
      }
    }
    return flag;
  } 

  /**
   * 从date开始计算time天后的日期
   *
   * @param date
   * @param time
   * @return
   * @throws ParseException
   */
  public static String getCalculateDateToString(String startDate, int time)
      throws ParseException {
    String resultDate = null;
    if (startDate != null && startDate.length() > 0) {
      Date date = formatStringToDate(startDate, DATE_FORMAT_YMD);
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.set(Calendar.DAY_OF_YEAR, time);
      date = c.getTime();
      resultDate = formatDateToString(date, DATE_FORMAT_YMD);
    }
    return resultDate;
  } 

  /**
   * 获取从某日期开始计算,指定的日期所在该年的第几周
   *
   * @param date
   * @param admitDate
   * @return
   * @throws ParseException
   *       @
   */
  public static int[] getYearAndWeeks(String date, String admitDate)
      throws ParseException {
    Calendar c = Calendar.getInstance();
    c.setTime(formatStringToDate(admitDate, DATE_FORMAT_YMD));
    int time = c.get(Calendar.DAY_OF_WEEK);
    return getWeekAndYear(date, 0, time);
  } 

  /**
   * 获取指定日期refDate,前或后一周的所有日期
   *
   * @param refDate
   *      参考日期
   * @param weekOffset
   *      -1:上周 0:本周 1:下周
   * @param startDate
   *      哪天算一周的第一天
   * @return yyyy-MM-dd 格式的日期
   * @throws ParseException
   *       @
   */
  public static List<String> getWeekDaysAroundDate(String refDate,
      int weekOffset, String startDate) throws ParseException {
    // 以startDate为一周的第一天
    Calendar c = Calendar.getInstance();
    c.setTime(formatStringToDate(startDate, DATE_FORMAT_YMD));
    int firstDayOfWeek = c.get(Calendar.DAY_OF_WEEK);
    // 获取相应周
    int[] weekAndYear = getWeekAndYear(refDate, weekOffset, firstDayOfWeek);
    // 获取相应周的所有日期
    return getWeekDays(weekAndYear[1], weekAndYear[0], firstDayOfWeek);
  } 

  /**
   * 根据时间点获取时间区间
   *
   * @param hours
   * @return
   */
  public static List<String[]> getTimePointsByHour(int[] hours) {
    List<String[]> hourPoints = new ArrayList<String[]>();
    String sbStart = ":00:00";
    String sbEnd = ":59:59";
    for (int i = 0; i < hours.length; i++) {
      String[] times = new String[2];
      times[0] = hours[i] + sbStart;
      times[1] = (hours[(i + 1 + hours.length) % hours.length] - 1)
          + sbEnd;
      hourPoints.add(times);
    }
    return hourPoints;
  } 

  /**
   *
   * 根据指定的日期,增加或者减少天数
   *
   * @param date
   * @param amount
   * @return
   */
  public static Date addDays(Date date, int amount) {
    return add(date, Calendar.DAY_OF_MONTH, amount);
  } 

  /**
   * 根据指定的日期,类型,增加或减少数量
   *
   * @param date
   * @param calendarField
   * @param amount
   * @return
   */
  public static Date add(Date date, int calendarField, int amount) {
    if (date == null) {
      throw new IllegalArgumentException("The date must not be null");
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.add(calendarField, amount);
    return c.getTime();
  } 

  /**
   * 获取当前日期的最大日期 时间2014-12-21 23:59:59
   * @return
   */
  public static Date getCurDateWithMaxTime() {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, 23);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    return c.getTime();
  } 

  /**
   * 获取当前日期的最小日期时间 2014-12-21 00:00:00
   * @return
   */
  public static Date getCurDateWithMinTime() {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    return c.getTime();
  } 

} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java中DateUtils时间工具类详解

    本文实例为大家分享了DateUtils时间工具类的具体代码,供大家参考,具体内容如下 package com.example.administrator.myapp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Date 工具类 * Created by lychun on 2017/12/07

  • Java日期处理工具类DateUtils详解

    本文实例为大家分享了Java日期处理工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * <日期时间处理工具类> */ public class DateUtils { /** * Dat

  • Java日期时间格式化操作DateUtils 的整理

    Java日期时间格式化操作DateUtils 的整理 直接上代码,总结了开发过程中经常用到的日期时间格式化操作! import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.concurrent.TimeUnit; /** * ClassName: DateUtils <br/> * D

  • Java工具类DateUtils实例详解

    本文实例为大家分享了Java工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 描述:公共日期工具类 */ public class DateUtils { public static String DATE_FORMAT = "yyyy-M

  • java针对于时间转换的DateUtils工具类

    本文实例为大家分享了时间转换的DateUtils工具类,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** * 时间日期工具类 * *

  • 实例解析Java日期格式工具类DateUtil.java

    话不多说,请看代码: DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.util.Date; import pers.kangxu.datautils.common.exception.DefineException; /** * * <b> * 处理日期 工具类 * </b> * @author kangxu * */ public c

  • java DateUtil工具类时间戳类型转换详解

    本文实例为大家分享了DateUtil工具类时间戳类型转换的具体代码,供大家参考,具体内容如下 package com.sinosoft.media.sms.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { //当前时间 //public static Date DATE_NOW=new Date(); /*

  • Java 中DateUtils日期工具类的实例详解

    Java 中DateUtils日期工具类的实例详解 介绍 在java中队日期类型的处理并不方便,通常都需要借助java.text.SimpleDateFormat类来实现日期类型 和字符串类型之间的转换,但是在jdk1.8之后有所改善,jdk1.7以及之前的版本处理日期类型并不方便, 可以借助Joda Time组件来处理,尤其是日期类型的一些数学操作就更是不方便. java代码 /** * * 日期工具类 java对日期的操作一直都很不理想,直到jdk1.8之后才有了本质的改变. * 如果使用的

  • Java使用DateUtils对日期进行数学运算经典应用示例【附DateUtils相关包文件下载】

    本文实例讲述了Java使用DateUtils对日期进行数学运算的方法.分享给大家供大家参考,具体如下: 最近在写数据上传的程序,需要对Date进行一些数学运算,个人感觉在java中,日期的数学运算还是比较常用的,所以把Date的数学运算都玩了一下.试了一下,发现DateUtils这个工具类对于Date的数学运算非常方便,见代码吧. package date; import java.text.SimpleDateFormat; import java.util.Date; import org.

  • Java日期工具类DateUtils实例详解

    在项目开发中,日期是我们必不可少的的一部分,本文将总结代码开发中的关于日期常用的一些方法,以方便自己后期使用.下面直接上菜了: package com.example.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.ut

  • Java日期时间类及计算详解

    目录 1. Java中与日期相关的类 1.1 java.util包 ① Date类 ② Calendar 日历类 roll 设置Calendar的容错性 set 1.2 java.time包 ① LocalDate 本地日期类 ② LocalTime 本地时间类 ③ LocalDateTime 本地日期时间类 ④ Instant 类 ⑤ Period 类 ⑥ Duration 类 2. 时间间隔计算 2.1 Period与Duration类 2.1.1 Duration 2.1.2 Period

  • java中Calendar类用法实例详解

    本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calendar常量(field)的作用 Calendar cal = Calendar.getInstance(); cal.get(Calendar.DATE);//-----------------------当天 1-31 cal.get(Calendar.DAY_OF_MONTH);//------

  • Java自定义异常类的实例详解

    Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写.我们常用的类ArithmeticException,NullPointerException,NegativeArraySizeException,ArrayIndexoutofBoundsException,SecurityException这些类,都是继续着RuntimeException这个父类,而这个父类还有一个父类是Exception.那么我们自己写异常类的时候,也是继续Excepti

  • Java操作集合工具类Collections使用详解

    这篇文章主要介绍了java操作集合工具类Collections使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法. 排序操作: reverse(List):反转List中元素的顺序: shuffle(List):对List集合元素进行

  • java操作mongoDB查询的实例详解

    java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且

  • java 中@Deprecated 注解的实例详解

    java 中@Deprecated 注解的实例详解 1 简介 Deprecated 同 SuppressWarnings 一样,都是 J2SE 5.0 中定义在Java.lang包中的标准 Annotation 之一,其可以标注在类.字段和方法上,其作用为:不鼓励程序员使用被 @Deprecated 注释的程序元素,因为被 @Deprecated 注释的元素很危险(例如,现阶段 JDK 提供的带有 @Deprecated 注释的元素在以后的 JDK 版本中可能被删除)或存在更好的选择.在使用不被

随机推荐