Moi,
Mulla on tällainen metodi...
public static String dateToString(Date date, String pattern) {
try {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(cal.getTime());
} catch (Exception e) {
}
return "";
}
Tuo näyttäisi palauttavan lopputuloksessa kuukauden väärin, yhtä pienempänä kuin pitäisi. (Eli siinä muodossa, jossa kuukausi ilmeisesti on indeksoituna Date-oliossa.) Mitenköhän näitä tilanteita kuuluisi hoitaa? Tuntuu todella kömpelöltä korjaukselta lisätä kuukausi ylimääräistä ennen formatia.
Onko normaalia, että Calendar ja Date toimii näin huonosti yhteen, vai onko taas käyttäjässä vika?
Mulla on tällainen metodi...
public static String dateToString(Date date, String pattern) {
try {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(cal.getTime());
} catch (Exception e) {
}
return "";
}
Tuo näyttäisi palauttavan lopputuloksessa kuukauden väärin, yhtä pienempänä kuin pitäisi. (Eli siinä muodossa, jossa kuukausi ilmeisesti on indeksoituna Date-oliossa.) Mitenköhän näitä tilanteita kuuluisi hoitaa? Tuntuu todella kömpelöltä korjaukselta lisätä kuukausi ylimääräistä ennen formatia.
Onko normaalia, että Calendar ja Date toimii näin huonosti yhteen, vai onko taas käyttäjässä vika?
Vastaukset 2
Vanhimmat
Hieman vaikeasti tuntuu menevän, koska metodin voi käytännössä yhdellä rivillä:
public static String dateToString(Date date, String pattern) {
return new SimpleDateFormat(format).format(pattern);
}
ja testi
public void testFormatting(){
Formater formater = new Formater();
String result = formater.dateToString(Calendar.getInstance().getTime(), "dd.MM.yyyy");
assertEquals("20.07.2011", result);
}
Ylempään luokkaan jäi näemmä static-sana. Mutta tälläisenä yleisenä hyvänä(tm) neuvona:
1. Vältä staattisia metodeja aina kun voit (eli käytännössä aina). Teet vaan testaamisesta hankalampaa.
2. Älä koskaan ja ikinä catchaa kaikkia poikkeuksia (Exception), varsinkaan kun tee mitään merkintää siitä että tapahtui poikkeus. DateFormater heittää IllegalArgumentException, jollei se ymmärrä haluta pvm-muotoa. NullPointterin-Exception catchaaminen on siinä ja siinä.
PS. Olisit tehnyt väärin jos olisit alkanut lisää tuossa dateToString-metodissa kuukausia tuohon date-olioon. Harjoitteluksi saat selvittää että miksi:)