View Javadoc

1   // Created on 14.11.2003
2   package com.pnpconsult.zeiterfassung.util;
3   
4   import java.text.DateFormat;
5   import java.text.ParseException;
6   import java.text.SimpleDateFormat;
7   import java.util.ArrayList;
8   import java.util.Calendar;
9   import java.util.Collection;
10  import java.util.Date;
11  
12  import org.apache.commons.lang.StringUtils;
13  import org.apache.commons.logging.Log;
14  import org.apache.commons.logging.LogFactory;
15  import org.apache.struts.util.LabelValueBean;
16  
17  /***
18   * @author <a href="mailto:powerpete@users.sf.net">M. Petersen </a>
19   * @version $Id: DateUtils.java,v 1.9 2004/07/22 08:41:28 powerpete Exp $
20   */
21  public class DateUtils
22  {
23      private static final Log LOG = LogFactory.getLog(DateUtils.class);
24      public static final String NO_LABEL = "--";
25      public static final String NO_VALUE = "-1";
26      public static final int NO_CHANGE = 0;
27      public static final int FIRST = 1;
28      public static final int LAST = 2;
29      private static final DateFormat FORMAT = DateFormat.getDateInstance(DateFormat.MEDIUM);
30      private static final DateFormat MONTH_FORMAT = new SimpleDateFormat("MMMM");
31      private static final DateFormat MONTH_YEAR_FORMAT = new SimpleDateFormat(
32          "MMMM yyyy");
33      private static final Date REALLY_OLD = createReallyOld();
34      
35      private static final Date createReallyOld()
36      {
37          try
38          {
39              return parse("31.12.9999");
40          }
41          catch (ParseException e)
42          {
43              LOG.fatal(e.getMessage(), e);
44              return null;
45          }
46      }
47  
48      private DateUtils()
49      {}
50  
51      public static String format(Date date)
52      {
53          if (date == null)
54          {
55              return "";
56          }
57          return FORMAT.format(date);
58      }
59  
60      public static Date parse(String str) throws ParseException
61      {
62          if (StringUtils.isEmpty(str))
63          {
64              return null;
65          }
66          return correctDate(FORMAT.parse(str));
67      }
68  
69      public static Collection monthCollection()
70      {
71          Collection months = new ArrayList(13);
72          months.add(new LabelValueBean(NO_LABEL, NO_VALUE));
73          Calendar cal = Calendar.getInstance();
74          cal.clear();
75          for (int i = Calendar.JANUARY; i <= Calendar.DECEMBER; i++)
76          {
77              cal.set(Calendar.MONTH, i);
78              String month = MONTH_FORMAT.format(cal.getTime());
79              months.add(new LabelValueBean(month, String.valueOf(i)));
80          }
81          return months;
82      }
83  
84      public static Collection yearCollection(
85          Date currentDate,
86          int yearsBefore,
87          int yearsAfter)
88      {
89          Collection years = new ArrayList(yearsBefore + 1 + yearsAfter);
90          Calendar calendar = Calendar.getInstance();
91          calendar.setTime(currentDate);
92          int currentYear = calendar.get(Calendar.YEAR);
93          years.add(new LabelValueBean(NO_LABEL, NO_VALUE));
94          for (int i = currentYear - yearsBefore; i < currentYear + yearsAfter; i++)
95          {
96              String year = String.valueOf(i);
97              years.add(new LabelValueBean(year, year));
98          }
99          return years;
100     }
101 
102     public static Date toFirst(Date date)
103     {
104         return changeDay(date, FIRST);
105     }
106 
107     public static Date toLast(Date date)
108     {
109         return changeDay(date, LAST);
110     }
111 
112     private static Date correctDate(Date date)
113     {
114         Calendar c = Calendar.getInstance();
115         c.setTime(date);
116         if (c.get(Calendar.YEAR) < 2000)
117         {
118             c.add(Calendar.YEAR, 2000);
119         }
120         return c.getTime();
121     }
122 
123     private static Date changeDay(Date date, int mode)
124     {
125         if (date == null)
126         {
127             return null;
128         }
129         Calendar calendar = Calendar.getInstance();
130         calendar.setTime(date);
131         setCalendarValue(calendar, Calendar.DAY_OF_MONTH, mode);
132         return calendar.getTime();
133     }
134 
135     private static void setCalendarValue(Calendar calendar, int field, int mode)
136     {
137         switch (mode)
138         {
139             case FIRST:
140                 calendar.set(field, calendar.getActualMinimum(field));
141                 break;
142             case LAST:
143                 calendar.set(field, calendar.getActualMaximum(field));
144                 break;
145         }
146     }
147 
148     public static String formatWithoutDay(Date date)
149     {
150         return MONTH_YEAR_FORMAT.format(date);
151     }
152 
153     public static Date max(Date date1, Date date2)
154     {
155         if (date1 == null)
156         {
157             return date2;
158         }
159         if (date2 == null)
160         {
161             return date1;
162         }
163         return date1.after(date2) ? date1 : date2;
164     }
165 
166     public static Date min(Date date1, Date date2)
167     {
168         if (date1 == null)
169         {
170             return date2;
171         }
172         if (date2 == null)
173         {
174             return date1;
175         }
176         return date1.before(date2) ? date1 : date2;
177     }
178 
179     public static Date firstOfMonth(Date date)
180     {
181         Calendar cal = Calendar.getInstance();
182         cal.setTime(date);
183         cal.set(Calendar.DAY_OF_MONTH, 1);
184         cal.set(Calendar.HOUR, 0);
185         cal.set(Calendar.MINUTE, 0);
186         cal.set(Calendar.SECOND, 0);
187         cal.set(Calendar.MILLISECOND, 0);
188         return cal.getTime();
189     }
190 
191     public static boolean equalsMonth(Date d1, Date d2)
192     {
193         if (d1 == null)
194         {
195             return d2 == null;
196         }
197         if (d2 == null)
198         {
199             return d1 == null;
200         }
201         Calendar c1 = Calendar.getInstance();
202         c1.setTime(d1);
203         Calendar c2 = Calendar.getInstance();
204         c2.setTime(d2);
205         return c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)
206             && c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR);
207     }
208 
209     public static Date createDate(int billingMonth, int billingYear)
210     {
211         if (billingMonth == -1 || billingYear == -1)
212         {
213             return null;
214         }
215         Calendar cal = Calendar.getInstance();
216         cal.clear();
217         cal.set(Calendar.MONTH, billingMonth);
218         cal.set(Calendar.YEAR, billingYear);
219         return cal.getTime();
220     }
221     
222     public static Date convertNullToReallyOld(Date date)
223     {
224         if (date == null)
225         {
226             return REALLY_OLD; 
227         }
228         return date;
229     }
230 }