日期类的一些常用方法

  1 package com.liveyc.common.utils;
  2 
  3 import java.text.ParseException;
  4 import java.text.SimpleDateFormat;
  5 import java.util.ArrayList;
  6 import java.util.Calendar;
  7 import java.util.Date;
  8 import java.util.HashMap;
  9 import java.util.List;
 10 import java.util.Map;
 11 
 12 /**
 13  * @module 系统模块
 14  * @func 日期处理类
 15  * @author chenjian
 16  */
 17 public class DateUtils {
 18     private static String ymdhms = "yyyy-MM-dd HH:mm:ss";
 19     private static String ymd = "yyyy-MM-dd";
 20     public static SimpleDateFormat ymdSDF = new SimpleDateFormat(ymd);
 21     private static String year = "yyyy";
 22     private static String month = "MM";
 23     private static String day = "dd";
 24     public static SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat(ymdhms);
 25     public static SimpleDateFormat yearSDF = new SimpleDateFormat(year);
 26     public static SimpleDateFormat monthSDF = new SimpleDateFormat(month);
 27     public static SimpleDateFormat daySDF = new SimpleDateFormat(day);
 28 
 29     public static SimpleDateFormat yyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 30 
 31     public static SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
 32 
 33     public static SimpleDateFormat yyyyMMddHH_NOT_ = new SimpleDateFormat("yyyyMMdd");
 34 
 35     public static long DATEMM = 86400L;
 36 
 37     
 38     
 39     /**
 40      * 获得当前时间 格式:2014-12-02 10:38:53
 41      * 
 42      * @return String
 43      */
 44     public static String getCurrentTime() {
 45         return yyyyMMddHHmmss.format(new Date());
 46     }
 47 
 48     /**
 49      * 可以获取昨天的日期 格式:2014-12-01
 50      * 
 51      * @return String
 52      */
 53     public static String getYesterdayYYYYMMDD() {
 54         Date date = new Date(System.currentTimeMillis() - DATEMM * 1000L);
 55         String str = yyyyMMdd.format(date);
 56         try {
 57             date = yyyyMMddHHmmss.parse(str + " 00:00:00");
 58             return yyyyMMdd.format(date);
 59         } catch (ParseException e) {
 60             e.printStackTrace();
 61         }
 62         return "";
 63     }
 64 
 65     /**
 66      * 可以获取后退N天的日期 格式:传入2 得到2014-11-30
 67      * 
 68      * @param backDay
 69      * @return String
 70      */
 71     public String getStrDate(String backDay) {
 72         Calendar calendar = Calendar.getInstance();
 73         calendar.add(Calendar.DATE, Integer.parseInt("-" + backDay));
 74         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 75         String back = sdf.format(calendar.getTime());
 76         return back;
 77     }
 78 
 79     /**
 80      * 获取当前的年、月、日
 81      * 
 82      * @return String
 83      */
 84     public static String getCurrentYear() {
 85         return yearSDF.format(new Date());
 86     }
 87 
 88     public static String getCurrentMonth() {
 89         return monthSDF.format(new Date());
 90     }
 91 
 92     public static String getCurrentDay() {
 93         return daySDF.format(new Date());
 94     }
 95 
 96     /**
 97      * 字符转日期
 98      * @param str
 99      * @return
100      */
101     public static Date StrToDate(String str) {
102         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
103         Date date = null;
104         try {
105             date = format.parse(str);
106         } catch (ParseException e) {
107             e.printStackTrace();
108         }
109         return date;
110     }
111 
112     /**
113      * 得到月份的最大天数
114      * 
115      * @param date
116      * @return
117      */
118     public static int getDaysOfMonth(Date date) {
119         Calendar calendar = Calendar.getInstance();
120         calendar.setTime(date);
121         return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
122     }
123 
124     /**
125      * 获取年月日 也就是当前时间 格式:2014-12-02
126      * 
127      * @return String
128      */
129     public static String getCurrentymd() {
130         return ymdSDF.format(new Date());
131     }
132 
133     /**
134      * 获取今天0点开始的秒数
135      * 
136      * @return long
137      */
138     public static long getTimeNumberToday() {
139         Date date = new Date();
140         String str = yyyyMMdd.format(date);
141         try {
142             date = yyyyMMdd.parse(str);
143             return date.getTime() / 1000L;
144         } catch (ParseException e) {
145             e.printStackTrace();
146         }
147         return 0L;
148     }
149 
150     /**
151      * 获取今天的日期 格式:20141202
152      * 
153      * @return String
154      */
155     public static String getTodateString() {
156         String str = yyyyMMddHH_NOT_.format(new Date());
157         return str;
158     }
159 
160     /**
161      * 获取昨天的日期 格式:20141201
162      * 
163      * @return String
164      */
165     public static String getYesterdayString() {
166         Date date = new Date(System.currentTimeMillis() - DATEMM * 1000L);
167         String str = yyyyMMddHH_NOT_.format(date);
168         return str;
169     }
170 
171     /**
172      * 获得昨天零点
173      * 
174      * @return Date
175      */
176     public static Date getYesterDayZeroHour() {
177         Calendar cal = Calendar.getInstance();
178         cal.add(Calendar.DATE, -1);
179         cal.set(Calendar.SECOND, 0);
180         cal.set(Calendar.MINUTE, 0);
181         cal.set(Calendar.HOUR, 0);
182         return cal.getTime();
183     }
184 
185     /**
186      * 把long型日期转String ;---OK
187      * 
188      * @param date
189      *            long型日期;
190      * @param format
191      *            日期格式;
192      * @return
193      */
194     public static String longToString(long date, String format) {
195         SimpleDateFormat sdf = new SimpleDateFormat(format);
196         // 前面的lSysTime是秒数,先乘1000得到毫秒数,再转为java.util.Date类型
197         java.util.Date dt2 = new Date(date * 1000L);
198         String sDateTime = sdf.format(dt2); // 得到精确到秒的表示:08/31/2006 21:08:00
199         return sDateTime;
200     }
201 
202     /**
203      * 获得今天零点
204      * 
205      * @return Date
206      */
207     public static Date getTodayZeroHour() {
208         Calendar cal = Calendar.getInstance();
209         cal.set(Calendar.SECOND, 0);
210         cal.set(Calendar.MINUTE, 0);
211         cal.set(Calendar.HOUR, 0);
212         return cal.getTime();
213     }
214 
215     /**
216      * 获得昨天23时59分59秒
217      * 
218      * @return
219      */
220     public static Date getYesterDay24Hour() {
221         Calendar cal = Calendar.getInstance();
222         cal.add(Calendar.DATE, -1);
223         cal.set(Calendar.SECOND, 59);
224         cal.set(Calendar.MINUTE, 59);
225         cal.set(Calendar.HOUR, 23);
226         return cal.getTime();
227     }
228 
229     /**
230      * String To Date ---OK
231      * 
232      * @param date
233      *            待转换的字符串型日期;
234      * @param format
235      *            转化的日期格式
236      * @return 返回该字符串的日期型数据;
237      */
238     public static Date stringToDate(String date, String format) {
239         SimpleDateFormat sdf = new SimpleDateFormat(format);
240         try {
241             return sdf.parse(date);
242         } catch (ParseException e) {
243             return null;
244         }
245     }
246 
247     /**
248      * 获得指定日期所在的自然周的第一天,即周日
249      * 
250      * @param date
251      *            日期
252      * @return 自然周的第一天
253      */
254     public static Date getStartDayOfWeek(Date date) {
255         Calendar c = Calendar.getInstance();
256         c.setTime(date);
257         c.set(Calendar.DAY_OF_WEEK, 1);
258         date = c.getTime();
259         return date;
260     }
261 
262     /**
263      * 获得指定日期所在的自然周的最后一天,即周六
264      * 
265      * @param date
266      * @return
267      */
268     public static Date getLastDayOfWeek(Date date) {
269         Calendar c = Calendar.getInstance();
270         c.setTime(date);
271         c.set(Calendar.DAY_OF_WEEK, 7);
272         date = c.getTime();
273         return date;
274     }
275 
276     /**
277      * 获得指定日期所在当月第一天
278      * 
279      * @param date
280      * @return
281      */
282     public static Date getStartDayOfMonth(Date date) {
283         Calendar c = Calendar.getInstance();
284         c.setTime(date);
285         c.set(Calendar.DAY_OF_MONTH, 1);
286         date = c.getTime();
287         return date;
288     }
289 
290     /**
291      * 获得指定日期所在当月最后一天
292      * 
293      * @param date
294      * @return
295      */
296     public static Date getLastDayOfMonth(Date date) {
297         Calendar c = Calendar.getInstance();
298         c.setTime(date);
299         c.set(Calendar.DATE, 1);
300         c.add(Calendar.MONTH, 1);
301         c.add(Calendar.DATE, -1);
302         date = c.getTime();
303         return date;
304     }
305 
306     /**
307      * 获得指定日期的下一个月的第一天
308      * 
309      * @param date
310      * @return
311      */
312     public static Date getStartDayOfNextMonth(Date date) {
313         Calendar c = Calendar.getInstance();
314         c.setTime(date);
315         c.add(Calendar.MONTH, 1);
316         c.set(Calendar.DAY_OF_MONTH, 1);
317         date = c.getTime();
318         return date;
319     }
320 
321     /**
322      * 获得指定日期的下一个月的最后一天
323      * 
324      * @param date
325      * @return
326      */
327     public static Date getLastDayOfNextMonth(Date date) {
328         Calendar c = Calendar.getInstance();
329         c.setTime(date);
330         c.set(Calendar.DATE, 1);
331         c.add(Calendar.MONTH, 2);
332         c.add(Calendar.DATE, -1);
333         date = c.getTime();
334         return date;
335     }
336 
337     /**
338      * 
339      * 求某一个时间向前多少秒的时间(currentTimeToBefer)---OK
340      * 
341      * @param givedTime
342      *            给定的时间
343      * @param interval
344      *            间隔时间的毫秒数;计算方式 :n(天)*24(小时)*60(分钟)*60(秒)(类型)
345      * @param format_Date_Sign
346      *            输出日期的格式;如yyyy-MM-dd、yyyyMMdd等;
347      */
348     public static String givedTimeToBefer(String givedTime, long interval, String format_Date_Sign) {
349         String tomorrow = null;
350         try {
351             SimpleDateFormat sdf = new SimpleDateFormat(format_Date_Sign);
352             Date gDate = sdf.parse(givedTime);
353             long current = gDate.getTime(); // 将Calendar表示的时间转换成毫秒
354             long beforeOrAfter = current - interval * 1000L; // 将Calendar表示的时间转换成毫秒
355             Date date = new Date(beforeOrAfter); // 用timeTwo作参数构造date2
356             tomorrow = new SimpleDateFormat(format_Date_Sign).format(date);
357         } catch (ParseException e) {
358             e.printStackTrace();
359         }
360         return tomorrow;
361     }
362 
363     /**
364      * 把String 日期转换成long型日期;---OK
365      * 
366      * @param date
367      *            String 型日期;
368      * @param format
369      *            日期格式;
370      * @return
371      */
372     public static long stringToLong(String date, String format) {
373         SimpleDateFormat sdf = new SimpleDateFormat(format);
374         Date dt2 = null;
375         long lTime = 0;
376         try {
377             dt2 = sdf.parse(date);
378             // 继续转换得到秒数的long型
379             lTime = dt2.getTime() / 1000;
380         } catch (ParseException e) {
381             e.printStackTrace();
382         }
383 
384         return lTime;
385     }
386 
387     /**
388      * 根据结束时间以及间隔差值,求符合要求的日期集合;
389      * 
390      * @param endTime
391      * @param interval
392      * @param isEndTime
393      * @return
394      */
395     public static Map<String, String> getDate(String endTime, Integer interval, boolean isEndTime) {
396         Map<String, String> result = new HashMap<String, String>();
397         if (interval == 0 || isEndTime) {
398             if (isEndTime)
399                 result.put(endTime, endTime);
400         }
401         if (interval > 0) {
402             int begin = 0;
403             for (int i = begin; i < interval; i++) {
404                 endTime = givedTimeToBefer(endTime, DATEMM, ymd);
405                 result.put(endTime, endTime);
406             }
407         }
408         return result;
409     }
410     
411     
412     /**
413      * @Description: 输出指定两个日期之间的所有日期
414      * @Title: process   
415      * @author:  xuyou   
416      * @date:   2017年12月12日  
417      * @param date1 开始时间
418      * @param date2 结束时间
419      * @return
420      * @throws Exception 
421      */
422     public static List<String> process(String date1, String date2) throws Exception {
423         List<String> list = new ArrayList<String>();
424         //如果两个时间相同
425         if (date1.equals(date2)) {
426             list.add(date1);
427             return list;
428         }
429 
430         String tmp;
431         if (date1.compareTo(date2) > 0) { // 确保 date1的日期不晚于date2
432             tmp = date1;
433             date1 = date2;
434             date2 = tmp;
435         }
436 
437         tmp = yyyyMMddHH_NOT_.format(str2Date(date1).getTime() + 3600 * 24 * 1000);
438         list.add(date1);
439         while (tmp.compareTo(date2) < 0) {
440             list.add(tmp);
441             tmp = yyyyMMddHH_NOT_.format(str2Date(tmp).getTime() + 3600 * 24 * 1000);
442         }
443         list.add(date2);
444         return list;
445     }
446 
447     public static Date str2Date(String str) {
448         if (str == null)
449             return null;
450         try {
451             return yyyyMMddHH_NOT_.parse(str);
452         } catch (ParseException e) {
453             e.printStackTrace();
454         }
455         return null;
456     }
457     
458 }
原文地址:https://www.cnblogs.com/xuyou551/p/8028259.html