1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* {@link SimpleDateFormat} ne gérant pas les lettre dans les format, {@link ComplexDateFormat} permettra de les gerer
* en les protégeant avec un \
* </p>
*
* <p>
* exemple : System.out.println(new ComplexDateFormat("hh\\Hmm").format(new Date())); affichera l'heure
* </p>
*
* @author gboulay
*
*/
public class ComplexDateFormat extends java.text.DateFormat
{
/**
*
*/
private static final long serialVersionUID = 145465464L;
private final SimpleDateFormat formater;
private Map<Integer, Character> protectedCharacters;
private static final char SUBSTITUTION = '.';
public ComplexDateFormat(String format)
{
super();
StringBuffer buffer = new StringBuffer();
protectedCharacters = new HashMap<Integer, Character>();
int i = 0;
while (i < format.length())
{
if (format.charAt(i) == '\\')
{
try
{
protectedCharacters.put(buffer.length(), format.charAt(i + 1));
buffer.append(SUBSTITUTION);
i += 2;
}
catch (ArrayIndexOutOfBoundsException e)
{
throw new IllegalArgumentException("dernier caractère protégé non saisi", e);
}
}
else
{
buffer.append(format.charAt(i++));
}
}
formater = new SimpleDateFormat(buffer.toString());
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
{
if (date == null)
{
return toAppendTo;
}
StringBuffer aux = formater.format(date, new StringBuffer(), fieldPosition);
for (Integer i : protectedCharacters.keySet())
{
aux.replace(i, i + 1, protectedCharacters.get(i).toString());
}
return toAppendTo.append(aux.toString());
}
@Override
public Date parse(String source, ParsePosition pos)
{
if (source == null || source.equals(""))
{
return null;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < source.length(); i++)
{
if (protectedCharacters.containsKey(i))
{
buffer.append(SUBSTITUTION);
}
else
{
buffer.append(source.charAt(i));
}
}
return formater.parse(buffer.toString(), pos);
}
} |
Partager