Java时间工具类

  1 import java.text.ParseException;
  2 import java.text.SimpleDateFormat;
  3 import java.util.Calendar;
  4 import java.util.Date;
  5
  6 import org.apache.commons.lang.StringUtils;
  7
  8 /**
  9  * 函数功能
 10  * 1.日期相加减天数
 11  * 2.时间格式化成字符串
 12  * 3.字符串解析成时间对象
 13  * 4.将日期时间格式成只有日期的字符串(可以直接使用dateFormat,Pattern为Null进行格式化)
 14  * 5.当时、分、秒为00:00:00时,将日期时间格式成只有日期的字符串
 15  * 6.将日期时间格式成日期对象,和dateParse互用
 16  * 7.时间加减小时
 17  * 8.时间加减分钟
 18  * 9.时间加减秒数
 19  * 10.时间加减天数
 20  * 11.时间加减月数
 21  * 12.时间加减年数
 22  * 13.时间比较(如果myDate>compareDate返回1,<返回-1,相等返回0)
 23  * 14.获取两个时间中最小的一个时间
 24  * 15.获取两个时间中最大的一个时间
 25  * 16.获取两个日期(不含时分秒)相差的天数,不包含今天
 26  * 17.获取两个日期(不含时分秒)相差的天数,包含今天
 27  * 18.获取日期时间的年份,如2017-02-13,返回2017
 28  * 19.获取日期时间的月份,如2017年2月13日,返回2
 29  * 20.获取日期时间的第几天(即返回日期的dd),如2017-02-13,返回13
 30  * 21.获取日期时间当月的总天数,如2017-02-13,返回28
 31  * 22.获取日期时间当年的总天数,如2017-02-13,返回2017年的总天数
 32  * 23.根据时间获取当月最大的日期
 33  * 24.根据时间获取当月最小的日期,也就是返回当月的1号日期对象
 34  */
 35 public class DateUtils {
 36
 37     public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
 38     public static final String MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
 39     public static final String HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";
 40     public static final String DATE_PATTERN = "yyyy-MM-dd";
 41     public static final String MONTH_PATTERN = "yyyy-MM";
 42     public static final String YEAR_PATTERN = "yyyy";
 43     public static final String MINUTE_ONLY_PATTERN = "mm";
 44     public static final String HOUR_ONLY_PATTERN = "HH";
 45
 46     /**
 47      * 日期相加减天数
 48      *
 49      * @param date        如果为Null,则为当前时间
 50      * @param days        加减天数
 51      * @param includeTime 是否包括时分秒,true表示包含
 52      * @return
 53      * @throws ParseException
 54      */
 55     public static Date dateAdd(Date date, int days, boolean includeTime) throws ParseException {
 56         if (date == null) {
 57             date = new Date();
 58         }
 59         if (!includeTime) {
 60             SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.DATE_PATTERN);
 61             date = sdf.parse(sdf.format(date));
 62         }
 63         Calendar cal = Calendar.getInstance();
 64         cal.setTime(date);
 65         cal.add(Calendar.DATE, days);
 66         return cal.getTime();
 67     }
 68
 69     /**
 70      * 时间格式化成字符串
 71      *
 72      * @param date    Date
 73      * @param pattern StringUtils.DATE_TIME_PATTERN || StringUtils.DATE_PATTERN, 如果为空,则为yyyy-MM-dd
 74      * @return
 75      * @throws ParseException
 76      */
 77     public static String dateFormat(Date date, String pattern) throws ParseException {
 78         if (StringUtils.isBlank(pattern)) {
 79             pattern = DateUtils.DATE_PATTERN;
 80         }
 81         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
 82         return sdf.format(date);
 83     }
 84
 85     /**
 86      * 字符串解析成时间对象
 87      *
 88      * @param dateTimeString String
 89      * @param pattern        StringUtils.DATE_TIME_PATTERN || StringUtils.DATE_PATTERN,如果为空,则为yyyy-MM-dd
 90      * @return
 91      * @throws ParseException
 92      */
 93     public static Date dateParse(String dateTimeString, String pattern) throws ParseException {
 94         if (StringUtils.isBlank(pattern)) {
 95             pattern = DateUtils.DATE_PATTERN;
 96         }
 97         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
 98         return sdf.parse(dateTimeString);
 99     }
100
101     /**
102      * 将日期时间格式成只有日期的字符串(可以直接使用dateFormat,Pattern为Null进行格式化)
103      *
104      * @param dateTime Date
105      * @return
106      * @throws ParseException
107      */
108     public static String dateTimeToDateString(Date dateTime) throws ParseException {
109         String dateTimeString = DateUtils.dateFormat(dateTime, DateUtils.DATE_TIME_PATTERN);
110         return dateTimeString.substring(0, 10);
111     }
112
113     /**
114      * 当时、分、秒为00:00:00时,将日期时间格式成只有日期的字符串,
115      * 当时、分、秒不为00:00:00时,直接返回
116      *
117      * @param dateTime Date
118      * @return
119      * @throws ParseException
120      */
121     public static String dateTimeToDateStringIfTimeEndZero(Date dateTime) throws ParseException {
122         String dateTimeString = DateUtils.dateFormat(dateTime, DateUtils.DATE_TIME_PATTERN);
123         if (dateTimeString.endsWith("00:00:00")) {
124             return dateTimeString.substring(0, 10);
125         } else {
126             return dateTimeString;
127         }
128     }
129
130     /**
131      * 将日期时间格式成日期对象,和dateParse互用
132      *
133      * @param dateTime Date
134      * @return Date
135      * @throws ParseException
136      */
137     public static Date dateTimeToDate(Date dateTime) throws ParseException {
138         Calendar cal = Calendar.getInstance();
139         cal.setTime(dateTime);
140         cal.set(Calendar.HOUR_OF_DAY, 0);
141         cal.set(Calendar.MINUTE, 0);
142         cal.set(Calendar.SECOND, 0);
143         cal.set(Calendar.MILLISECOND, 0);
144         return cal.getTime();
145     }
146
147     /**
148      * 时间加减小时
149      *
150      * @param startDate 要处理的时间,Null则为当前时间
151      * @param hours     加减的小时
152      * @return Date
153      */
154     public static Date dateAddHours(Date startDate, int hours) {
155         if (startDate == null) {
156             startDate = new Date();
157         }
158         Calendar c = Calendar.getInstance();
159         c.setTime(startDate);
160         c.set(Calendar.HOUR, c.get(Calendar.HOUR) + hours);
161         return c.getTime();
162     }
163
164     /**
165      * 时间加减分钟
166      *
167      * @param startDate 要处理的时间,Null则为当前时间
168      * @param minutes   加减的分钟
169      * @return
170      */
171     public static Date dateAddMinutes(Date startDate, int minutes) {
172         if (startDate == null) {
173             startDate = new Date();
174         }
175         Calendar c = Calendar.getInstance();
176         c.setTime(startDate);
177         c.set(Calendar.MINUTE, c.get(Calendar.MINUTE) + minutes);
178         return c.getTime();
179     }
180
181     /**
182      * 时间加减秒数
183      *
184      * @param startDate 要处理的时间,Null则为当前时间
185      * @param minutes   加减的秒数
186      * @return
187      */
188     public static Date dateAddSeconds(Date startDate, int seconds) {
189         if (startDate == null) {
190             startDate = new Date();
191         }
192         Calendar c = Calendar.getInstance();
193         c.setTime(startDate);
194         c.set(Calendar.SECOND, c.get(Calendar.SECOND) + seconds);
195         return c.getTime();
196     }
197
198     /**
199      * 时间加减天数
200      *
201      * @param startDate 要处理的时间,Null则为当前时间
202      * @param days      加减的天数
203      * @return Date
204      */
205     public static Date dateAddDays(Date startDate, int days) {
206         if (startDate == null) {
207             startDate = new Date();
208         }
209         Calendar c = Calendar.getInstance();
210         c.setTime(startDate);
211         c.set(Calendar.DATE, c.get(Calendar.DATE) + days);
212         return c.getTime();
213     }
214
215     /**
216      * 时间加减月数
217      *
218      * @param startDate 要处理的时间,Null则为当前时间
219      * @param months    加减的月数
220      * @return Date
221      */
222     public static Date dateAddMonths(Date startDate, int months) {
223         if (startDate == null) {
224             startDate = new Date();
225         }
226         Calendar c = Calendar.getInstance();
227         c.setTime(startDate);
228         c.set(Calendar.MONTH, c.get(Calendar.MONTH) + months);
229         return c.getTime();
230     }
231
232     /**
233      * 时间加减年数
234      *
235      * @param startDate 要处理的时间,Null则为当前时间
236      * @param years     加减的年数
237      * @return Date
238      */
239     public static Date dateAddYears(Date startDate, int years) {
240         if (startDate == null) {
241             startDate = new Date();
242         }
243         Calendar c = Calendar.getInstance();
244         c.setTime(startDate);
245         c.set(Calendar.YEAR, c.get(Calendar.YEAR) + years);
246         return c.getTime();
247     }
248
249     /**
250      * 时间比较(如果myDate>compareDate返回1,<返回-1,相等返回0)
251      *
252      * @param myDate      时间
253      * @param compareDate 要比较的时间
254      * @return int
255      */
256     public static int dateCompare(Date myDate, Date compareDate) {
257         Calendar myCal = Calendar.getInstance();
258         Calendar compareCal = Calendar.getInstance();
259         myCal.setTime(myDate);
260         compareCal.setTime(compareDate);
261         return myCal.compareTo(compareCal);
262     }
263
264     /**
265      * 获取两个时间中最小的一个时间
266      *
267      * @param date
268      * @param compareDate
269      * @return
270      */
271     public static Date dateMin(Date date, Date compareDate) {
272         if (date == null) {
273             return compareDate;
274         }
275         if (compareDate == null) {
276             return date;
277         }
278         if (1 == dateCompare(date, compareDate)) {
279             return compareDate;
280         } else if (-1 == dateCompare(date, compareDate)) {
281             return date;
282         }
283         return date;
284     }
285
286     /**
287      * 获取两个时间中最大的一个时间
288      *
289      * @param date
290      * @param compareDate
291      * @return
292      */
293     public static Date dateMax(Date date, Date compareDate) {
294         if (date == null) {
295             return compareDate;
296         }
297         if (compareDate == null) {
298             return date;
299         }
300         if (1 == dateCompare(date, compareDate)) {
301             return date;
302         } else if (-1 == dateCompare(date, compareDate)) {
303             return compareDate;
304         }
305         return date;
306     }
307
308     /**
309      * 获取两个日期(不含时分秒)相差的天数,不包含今天
310      *
311      * @param startDate
312      * @param endDate
313      * @return
314      * @throws ParseException
315      */
316     public static int dateBetween(Date startDate, Date endDate) throws ParseException {
317         Date dateStart = dateParse(dateFormat(startDate, DATE_PATTERN), DATE_PATTERN);
318         Date dateEnd = dateParse(dateFormat(endDate, DATE_PATTERN), DATE_PATTERN);
319         return (int) ((dateEnd.getTime() - dateStart.getTime()) / 1000 / 60 / 60 / 24);
320     }
321
322     /**
323      * 获取两个日期(不含时分秒)相差的天数,包含今天
324      *
325      * @param startDate
326      * @param endDate
327      * @return
328      * @throws ParseException
329      */
330     public static int dateBetweenIncludeToday(Date startDate, Date endDate) throws ParseException {
331         return dateBetween(startDate, endDate) + 1;
332     }
333
334     /**
335      * 获取日期时间的年份,如2017-02-13,返回2017
336      *
337      * @param date
338      * @return
339      */
340     public static int getYear(Date date) {
341         Calendar cal = Calendar.getInstance();
342         cal.setTime(date);
343         return cal.get(Calendar.YEAR);
344     }
345
346     /**
347      * 获取日期时间的月份,如2017年2月13日,返回2
348      *
349      * @param date
350      * @return
351      */
352     public static int getMonth(Date date) {
353         Calendar cal = Calendar.getInstance();
354         cal.setTime(date);
355         return cal.get(Calendar.MONTH) + 1;
356     }
357
358     /**
359      * 获取日期时间的第几天(即返回日期的dd),如2017-02-13,返回13
360      *
361      * @param date
362      * @return
363      */
364     public static int getDate(Date date) {
365         Calendar cal = Calendar.getInstance();
366         cal.setTime(date);
367         return cal.get(Calendar.DATE);
368     }
369
370     /**
371      * 获取日期时间当月的总天数,如2017-02-13,返回28
372      *
373      * @param date
374      * @return
375      */
376     public static int getDaysOfMonth(Date date) {
377         Calendar cal = Calendar.getInstance();
378         cal.setTime(date);
379         return cal.getActualMaximum(Calendar.DATE);
380     }
381
382     /**
383      * 获取日期时间当年的总天数,如2017-02-13,返回2017年的总天数
384      *
385      * @param date
386      * @return
387      */
388     public static int getDaysOfYear(Date date) {
389         Calendar cal = Calendar.getInstance();
390         cal.setTime(date);
391         return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
392     }
393
394     /**
395      * 根据时间获取当月最大的日期
396      * <li>2017-02-13,返回2017-02-28</li>
397      * <li>2016-02-13,返回2016-02-29</li>
398      * <li>2016-01-11,返回2016-01-31</li>
399      *
400      * @param date Date
401      * @return
402      * @throws Exception
403      */
404     public static Date maxDateOfMonth(Date date) throws Exception {
405         Calendar cal = Calendar.getInstance();
406         cal.setTime(date);
407         int value = cal.getActualMaximum(Calendar.DATE);
408         return dateParse(dateFormat(date, MONTH_PATTERN) + "-" + value, null);
409     }
410
411     /**
412      * 根据时间获取当月最小的日期,也就是返回当月的1号日期对象
413      *
414      * @param date Date
415      * @return
416      * @throws Exception
417      */
418     public static Date minDateOfMonth(Date date) throws Exception {
419         Calendar cal = Calendar.getInstance();
420         cal.setTime(date);
421         int value = cal.getActualMinimum(Calendar.DATE);
422         return dateParse(dateFormat(date, MONTH_PATTERN) + "-" + value, null);
423     }
424
425 }

原文地址:https://www.cnblogs.com/llawliet0001/p/9850474.html

时间: 2024-11-09 00:42:42

Java时间工具类的相关文章

Java日期工具类,Java时间工具类,Java时间格式化

Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright  蕃薯耀 2017年2月4日 15:03:27 星期六 http://www.cnblogs.co

超详细的Java时间工具类

package com.td.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Gregori

Java 时间工具类

1 package com.xm.utils; 2 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Calendar; 6 import java.util.Date; 7 import java.util.GregorianCalendar; 8 import java.util.Locale; 9 import java.util.TimeZone; 10 11 /*

java时间工具类(项目实用)

package com.eabax.plugin.yundada.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.LinkedHashM

开源Java时间工具类Joda-Time体验

import org.joda.time.*; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Test; import java.util.Locale; /**  * @author by lei zhou on 2017/11/09 14:20.  */ public class JodaTimeTest {     @Te

JAVA时间工具类用法

1.获得N天前的TIMESTAMP 1 Calendar cl = Calendar.getInstance(); 2 cl.add(Calendar.DAY_OF_YEAR, -7); 3 Date date = cl.getTime(); 4 long time = date.getTime(); 5 Timestamp timestamp = new Timestamp(time); 2.程序启动当前时间和任务执行既定时间 1 /* 2 delegate time 3 */ 4 Strin

java 时间戳工具类(最好最全)

package com.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import android.text.format.DateFormat; public clas

Java并发工具类CyclicBarrier

CyclicBarrier同步屏障 java并发工具类中有一个叫做CyclicBarrier的类,与CountDownLatch类似,都可以实现线程间的同步,但是差别是CyclicBarrier是可重置的同步屏障. 想象一个场景,有N个人不同时间走到一扇门,因为门需要N个人合力才能推开,所以人不足N个时,只能阻塞在此,等到N个人都到了之后,可以推开门,继续进行之前的工作.CyclicBarrier就是这扇门. 看看下面的代码,定义了一个线程数为2的,CyclicBarrier,并在主线程和另外一

Java常用工具类集合

数据库连接工具类 仅仅获得连接对象 ConnDB.java package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对象 * */ public class ConnDB { private static Connection conn = null; private static final String DRIVER_NAME = "com.mysql