欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java日期工具類DateUtils實(shí)例詳解

 更新時(shí)間:2020年10月21日 10:12:33   作者:IT狗探求  
這篇文章主要為大家詳細(xì)介紹了Java日期工具類DateUtils實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在項(xiàng)目開發(fā)中,日期是我們必不可少的的一部分,本文將總結(jié)代碼開發(fā)中的關(guān)于日期常用的一些方法,以方便自己后期使用。下面直接上菜了:

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(); 
  
  
 /** 
  * 日期轉(zhuǎn)換為制定格式字符串 
  * 
  * @param time 
  * @param format 
  * @return 
  */ 
 public static String formatDateToString(Date time, String format) { 
  SimpleDateFormat sdf = new SimpleDateFormat(format); 
  return sdf.format(time); 
 } 
 
 /** 
  * 字符串轉(zhuǎn)換為制定格式日期 
  * (注意:當(dāng)你輸入的日期是2014-12-21 12:12,format對(duì)應(yīng)的應(yīng)為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()); 
  } 
 } 
 
 /** 
  * 判斷一個(gè)日期是否屬于兩個(gè)時(shí)段內(nèi) 
  * @param time 
  * @param timeRange 
  * @return 
  */ 
 public static boolean isTimeInRange(Date time, Date[] timeRange) { 
  return (!time.before(timeRange[0]) && !time.after(timeRange[1])); 
 } 
 
 /** 
  * 從完整的時(shí)間截取精確到分的時(shí)間 
  * 
  * @param fullDateStr 
  * @return 
  */ 
 public static String getDateToMinute(String fullDateStr) { 
  return fullDateStr == null ? null 
    : (fullDateStr.length() >= dateLength ? fullDateStr.substring( 
      0, dateLength) : fullDateStr); 
 } 
 
 /** 
  * 返回指定年度的所有周。List中包含的是String[2]對(duì)象 string[0]本周的開始日期,string[1]是本周的結(jié)束日期。 
  * 日期的格式為YYYY-MM-DD 每年的第一個(gè)周,必須包含星期一且是完整的七天。 
  * 例如:2009年的第一個(gè)周開始日期為2009-01-05,結(jié)束日期為2009-01-11。 星期一在哪一年,那么包含這個(gè)星期的周就是哪一年的周。 
  * 例如:2008-12-29是星期一,2009-01-04是星期日,哪么這個(gè)周就是2008年度的最后一個(gè)周。 
  * 
  * @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; 
 } 
 
 /** 
  * 計(jì)算指定年、周的上一年、周 
  * 
  * @param year 
  * @param week 
  * @return @ 
  */ 
 public static int[] getLastYearWeek(int year, int week) { 
  if (week <= 0) { 
   throw new IllegalArgumentException("周序號(hào)不能小于1?。?); 
  } 
  int[] result = { week, year }; 
  if (week == 1) { 
   // 上一年 
   result[1] -= 1; 
   // 最后一周 
   result[0] = getWeekNumOfYear(result[1]); 
  } else { 
   result[0] -= 1; 
  } 
  return result; 
 } 
 
 /** 
  * 下一個(gè)[周,年] 
  * 
  * @param year 
  * @param week 
  * @return @ 
  */ 
 public static int[] getNextYearWeek(int year, int week) { 
  if (week <= 0) { 
   throw new IllegalArgumentException("周序號(hào)不能小于1!!"); 
  } 
  int[] result = { week, year }; 
  int weeks = getWeekNumOfYear(year); 
  if (week == weeks) { 
   // 下一年 
   result[1] += 1; 
   // 第一周 
   result[0] = 1; 
  } else { 
   result[0] += 1; 
  } 
  return result; 
 } 
 
 /** 
  * 計(jì)算指定年度共有多少個(gè)周。(從周一開始) 
  * 
  * @param year 
  * @return @ 
  */ 
 public static int getWeekNumOfYear(final int year) { 
  return getWeekNumOfYear(year, Calendar.MONDAY); 
 } 
 
 /** 
  * 計(jì)算指定年度共有多少個(gè)周。 
  * 
  * @param year 
  *   yyyy 
  * @return @ 
  */ 
 public static int getWeekNumOfYear(final int year, int firstDayOfWeek) { 
  // 每年至少有52個(gè)周 ,最多有53個(gè)周。 
  int minWeeks = 52; 
  int maxWeeks = 53; 
  int result = minWeeks; 
  int sIndex = 4; 
  String date = getDateForDayOfWeek(year, maxWeeks, firstDayOfWeek); 
  // 判斷年度是否相符,如果相符說明有53個(gè)周。 
  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(); 
 } 
 
 /** 
  * 獲取指定年份的第幾周的第幾天對(duì)應(yīng)的日期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); 
 } 
 
 /** 
  * 獲取指定年份的第幾周的第幾天對(duì)應(yīng)的日期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); 
 
 } 
 
 /** 
  * 計(jì)算某年某周內(nèi)的所有日期(從周一開始 為每周的第一天) 
  * 
  * @param yearNum 
  * @param weekNum 
  * @return @ 
  */ 
 public static List<String> getWeekDays(int yearNum, int weekNum) { 
  return getWeekDays(yearNum, weekNum, Calendar.MONDAY); 
 } 
 
 /** 
  * 計(jì)算某年某周內(nèi)的所有日期(七天) 
  * 
  * @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; 
 } 
 
 /** 
  * 獲取目標(biāo)日期的上周、或本周、或下周的年、周信息 
  * 
  * @param queryDate 
  *   傳入的時(shí)間 
  * @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; 
 } 
 
 /** 
  * 計(jì)算個(gè)兩日期的天數(shù) 
  * 
  * @param startDate 
  *   開始日期字串 
  * @param endDate 
  *   結(jié)束日期字串 
  * @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); 
 } 
 
 /** 
  * 計(jì)算兩個(gè)日期之間的天數(shù)差 
  * @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; 
 } 
 
 /** 
  * 計(jì)算兩個(gè)日期之間的年份差距 
  * 
  * @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; 
 } 
 
 /** 
  * 計(jì)算兩個(gè)日期之間的月份差距 
  * 
  * @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); 
 
 } 
 
 /** 
  * 計(jì)算是否包含當(dāng)前日期 
  * 
  * @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開始計(jì)算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; 
 } 
 
 /** 
  * 獲取從某日期開始計(jì)算,指定的日期所在該年的第幾周 
  * 
  * @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); 
  // 獲取相應(yīng)周 
  int[] weekAndYear = getWeekAndYear(refDate, weekOffset, firstDayOfWeek); 
  // 獲取相應(yīng)周的所有日期 
  return getWeekDays(weekAndYear[1], weekAndYear[0], firstDayOfWeek); 
 } 
 
 /** 
  * 根據(jù)時(shí)間點(diǎn)獲取時(shí)間區(qū)間 
  * 
  * @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; 
 } 
 
 /** 
  * 
  * 根據(jù)指定的日期,增加或者減少天數(shù) 
  * 
  * @param date 
  * @param amount 
  * @return 
  */ 
 public static Date addDays(Date date, int amount) { 
  return add(date, Calendar.DAY_OF_MONTH, amount); 
 } 
 
 /** 
  * 根據(jù)指定的日期,類型,增加或減少數(shù)量 
  * 
  * @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(); 
 } 
 
 /** 
  * 獲取當(dāng)前日期的最大日期 時(shí)間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(); 
 } 
 
 /** 
  * 獲取當(dāng)前日期的最小日期時(shí)間 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(); 
 } 
 
} 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    Java中new關(guān)鍵字和newInstance方法的區(qū)別分享

    在初始化一個(gè)類,生成一個(gè)實(shí)例的時(shí)候,newInstance()方法和new關(guān)鍵字除了一個(gè)是方法一個(gè)是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對(duì)象的方式不同
    2013-07-07
  • Java?8函數(shù)式接口之Consumer用法示例詳解

    Java?8函數(shù)式接口之Consumer用法示例詳解

    這篇文章主要為大家介紹了Java?8函數(shù)式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    在java中處理字符時(shí),經(jīng)常會(huì)發(fā)生亂碼,下面這篇文章主要給大家介紹了關(guān)于Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • java解析XML詳解

    java解析XML詳解

    這篇文章主要介紹了XML解析四種方式代碼示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 深入理解equals和hashCode方法

    深入理解equals和hashCode方法

    在Java中,equals和hashCode方法是Object中提供的兩個(gè)方法,這兩個(gè)方法對(duì)以后的學(xué)習(xí)有很大的幫助,本文就深度來去講解這兩個(gè)方法。下面小編帶大家來一起學(xué)習(xí)吧
    2019-06-06
  • SpringBoot通過注解監(jiān)測(cè)Controller接口的代碼示例

    SpringBoot通過注解監(jiān)測(cè)Controller接口的代碼示例

    在Spring Boot中,度量指標(biāo)(Metrics)是監(jiān)控和診斷應(yīng)用性能與行為的重要工具,Spring Boot通過集成Micrometer和Spring Boot Actuator,提供了強(qiáng)大的度量指標(biāo)收集與暴露功能,本文介紹了SpringBoot通過注解監(jiān)測(cè)Controller接口,需要的朋友可以參考下
    2024-07-07
  • java使用JNA(Java Native Access)調(diào)用dll的方法

    java使用JNA(Java Native Access)調(diào)用dll的方法

    java使用JNA(Java Native Access)調(diào)用windows系統(tǒng)的dll文件的例子
    2013-11-11
  • java為什么使用BlockingQueue解決競(jìng)態(tài)條件問題面試精講

    java為什么使用BlockingQueue解決競(jìng)態(tài)條件問題面試精講

    這篇文章主要為大家介紹了java為什么使用BlockingQueue解決競(jìng)態(tài)條件問題面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析

    Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析

    在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會(huì)用到Filter和Interceptor,這篇文章主要介紹了Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系?,需要的朋友可以參考下
    2022-10-10
  • 使用springboot logback動(dòng)態(tài)獲取application的配置項(xiàng)

    使用springboot logback動(dòng)態(tài)獲取application的配置項(xiàng)

    這篇文章主要介紹了使用springboot logback動(dòng)態(tài)獲取application的配置項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論