KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > calipso > common > DateEx


1 package com.calipso.common;
2
3 import com.calipso.reportgenerator.common.InfoException;
4
5 import java.util.*;
6 import java.text.*;
7 import java.io.Serializable JavaDoc;
8 import com.calipso.reportgenerator.reportcalculator.SharedDate;
9 import com.calipso.reportgenerator.common.LanguageTraslator;
10
11 /**
12  * Representa una fecha con sus formatos
13  */

14 public class DateEx implements Serializable JavaDoc, Comparable JavaDoc {
15   //NOTA: Es necesario hacer el new ArrayList, ya que luego se utilizara el add(index, object), no soportado por la lista de Arrays.asList()
16
private static final List possiblePatterns = new ArrayList(Arrays.asList(new Object JavaDoc[] {"yyyyMMdd", "yyyyMMddHHmmssSSS"}));
17
18   private Date date;
19
20   public DateEx(Object JavaDoc object) throws InfoException{
21     setDateFromObject(object, "");
22   }
23
24   private void setDateFromObject(Object JavaDoc date, String JavaDoc inputFormat) throws InfoException{
25     Date newDate = null;
26     if(date instanceof Date){
27       newDate = (Date)date;
28     }else if(date instanceof String JavaDoc){
29       String JavaDoc localDate = ((String JavaDoc)date).trim();
30       newDate = getDateFromString(localDate, inputFormat);
31     }else{
32       String JavaDoc localDate = date.toString();
33       newDate = getDateFromString(localDate, inputFormat);
34     }
35     if(newDate != null){
36       this.date = newDate;
37     }else{
38       throw new InfoException(LanguageTraslator.traslate("77"));
39     }
40   }
41
42   public DateEx(Date date) {
43     this.date = date;
44   }
45
46   public DateEx(Object JavaDoc date, String JavaDoc inputFormat) throws InfoException {
47     setDateFromObject(date, inputFormat);
48   }
49
50   /**
51    * Este constructor genera el Date a partir de un double.
52    * Primero trata de crearlo a partir de la conversion a string del numero,
53    * respetando el input format del DataSourceDefinition.
54    * Luego, si ese no se pudo completar intenta con el formato de fechas de Microsoft,
55    * por si es un double pasado desde un data source excel.
56    * @param date
57    * @param inputFormat
58    * @throws InfoException
59    */

60   public DateEx(Number JavaDoc date, String JavaDoc inputFormat) throws InfoException{
61     Format numberFormat = new DecimalFormat("#####################");
62     String JavaDoc value = numberFormat.format(date);
63     try{
64       setDateFromObject(value, inputFormat);
65     }catch (InfoException e){
66       DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
67       Date expiration;
68       try{
69         expiration = dateFormat.parse("18991230");
70       }catch (ParseException e1){
71         throw new InfoException(LanguageTraslator.traslate("77"), e1);
72       }
73       GregorianCalendar gregorianCalendar = new GregorianCalendar();
74       gregorianCalendar.setTime(expiration);
75       gregorianCalendar.add(GregorianCalendar.DAY_OF_YEAR,(new Integer JavaDoc(value)).intValue());
76       this.date = gregorianCalendar.getTime();
77     }
78   }
79
80   /**
81    * Este metodo trata de obtener un Date de un String realizando "parse" varias veces, con cada formato definido.
82    * Los formatos estaran definidos por el parametro inputFormat, por los formatos comunes definidos en la variable local
83    * possiblePatterns. Por ultimo se utiliza el formato que se obtiene del Locale, obtenido de LanguageTranslator.getLocal().
84    * Si todos los parse fallan, se retornara null.
85    * @param localDate El String a parsear
86    * @param inputFormat El formato con el que se espera recibir la fecha. Puede ser null o ""
87    * @return Una fecha si funciono algun Parse. Null en caso contrario
88    */

89   private Date getDateFromString(String JavaDoc localDate, String JavaDoc inputFormat) {
90     Date result = null;
91     if(inputFormat!=null && !inputFormat.equalsIgnoreCase("")){
92       setFirst(possiblePatterns, inputFormat);
93     }
94     for (Iterator iterator = possiblePatterns.iterator(); result==null && iterator.hasNext();) {
95       String JavaDoc pattern = (String JavaDoc)iterator.next();
96       DateFormat format = new SimpleDateFormat(pattern);
97       format.setLenient(false);
98       try {
99         result = format.parse(localDate);
100       } catch (ParseException e) {
101         //Continuar con el siguiente formato
102
}
103     }
104     if(result==null){
105       DateFormat format = SimpleDateFormat.getDateInstance(DateFormat.SHORT, LanguageTraslator.getLocale());
106       try {
107         format.parse(localDate);
108       } catch (ParseException e) {
109         //Retorna null
110
}
111     }
112     return result;
113   }
114
115   private void setFirst(List posiblepatterns, String JavaDoc inputFormat) {
116     if(posiblepatterns.contains(inputFormat)){
117       posiblepatterns.remove(inputFormat);
118     }
119     Object JavaDoc tmp = posiblepatterns.get(0);
120     if(!inputFormat.equals(tmp)){
121       posiblepatterns.set(0, inputFormat);
122       posiblepatterns.add(tmp);
123     }
124   }
125
126   public String JavaDoc toString() {
127     SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateInstance(DateFormat.SHORT, LanguageTraslator.getLocale());//new SimpleDateFormat(LanguageTraslator.getLocale().getd);
128
return new String JavaDoc(dateFormat.format((date)));
129   }
130
131   public Date getDate() {
132     return date;
133   }
134
135   public int compareTo(Object JavaDoc o) {
136     if (o instanceof DateEx) {
137       return date.compareTo(((DateEx) o).getDate());
138     }
139     else {
140       if (o instanceof SharedDate) {
141         return date.compareTo(((SharedDate) o).getDateEx().getDate());
142       }
143       else {
144         if (o instanceof Date) {
145           return date.compareTo(((Date) o));
146         }
147         else {
148           if (o instanceof String JavaDoc) {
149             //Date localDate;
150
//DateFormat dateFormat;
151
//dateFormat = new SimpleDateFormat("yyyyMMdd");
152
try {
153               DateEx localDate = new DateEx(o, "");
154               //localDate = dateFormat.parse((String) o);
155
return date.compareTo(localDate.getDate());
156             }
157             catch (Exception JavaDoc e) {
158               return -1;
159             }
160           }
161         }
162       }
163     }
164     return -1;
165   }
166
167   public boolean equals(Object JavaDoc o){
168     return ((DateEx)o).getDate().equals(date);
169   }
170
171   /*public String toNumberFormat() {
172     DateFormat dateFormat;
173     if(inputFormat!=null && !inputFormat.equalsIgnoreCase("")){
174       dateFormat = new SimpleDateFormat(inputFormat);
175     } else {
176       dateFormat = new SimpleDateFormat("yyyyMMdd");
177     }
178     return dateFormat.format(date);
179   }*/

180
181 }
Popular Tags