Java: zobrazení názvů měsíců

aaa

Java: zobrazení názvů měsíců
« kdy: 07. 01. 2015, 00:11:57 »
Ako riesite zobrazenie mesiacov v Jave 8?

Mnohe kniznice pouzivaju:
Kód: [Vybrat]
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
String[] monthNames = dateFormatSymbols.getMonths();

To este v Jave 7 fungovalo. V Jave 8 to nejaky odbornik nekompatibilne "vylepsil" (http://bugs.java.com/view_bug.do?bug_id=7079560 - refreshnite, aby sa to nacitalo), takze si uzivatel namiesto "leden", "unor", atd, vybera mesiace "ledna", "unora", "brezna".

Ake je na to rozumne a rychle riesenie? Ide mi naozaj iba o chovanie ako v Jave7 aj v cudzich knizniciach, nic viac neziadam.
Detekcia Javy a volanie getDisplayNames na Calendar s nejakymi divnymi konstantami (v Jave7 este nie su kontanty STANDALONE) a to cele vlozene aspectom namiesto aktualnej implementacie mi naozaj nesedia.
« Poslední změna: 07. 01. 2015, 15:54:11 od Petr Krčmář »


Cobolotobolo

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #1 kdy: 07. 01. 2015, 00:42:06 »
V Cobolu by se to nestalo. Pouzivej Cobol, jak vidis, ma smysl.

Natix

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #2 kdy: 07. 01. 2015, 01:53:55 »
Kód: [Vybrat]
import java.time.Month;
import java.time.format.TextStyle;

Month.JANUARY.getDisplayName(TextStyle.FULL_STANDALONE, new Locale("cs"));
> leden

Pokud potřebuješ podporovat i Javu < 8, tak existuje backport JSR-310: http://www.threeten.org/threetenbp/

Pomstu IBM jménem java.util.Calendar spláchni do kanalizace tak, jak si už dávno zaslouží. ;)

Sten

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #3 kdy: 07. 01. 2015, 02:58:40 »
Ako riesite zobrazenie mesiacov v Jave 8?

Mnohe kniznice pouzivaju:
Kód: [Vybrat]
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
String[] monthNames = dateFormatSymbols.getMonths();

To este v Jave 7 fungovalo. V Jave 8 to nejaky odbornik nekompatibilne "vylepsil" (http://bugs.java.com/view_bug.do?bug_id=7079560 - refreshnite, aby sa to nacitalo), takze si uzivatel namiesto "leden", "unor", atd, vybera mesiace "ledna", "unora", "brezna".

Otázka je, co s tím měli dělat. „3. ledna“ má být „ledna“, ne „leden“. Asi vyhodnotili, že více lidí zobrazuje měsíce se dnem místo bez něj, tak vybrali tuhle variantu jako výchozí.

Ake je na to rozumne a rychle riesenie? Ide mi naozaj iba o chovanie ako v Jave7 aj v cudzich knizniciach, nic viac neziadam.
Detekcia Javy a volanie getDisplayNames na Calendar s nejakymi divnymi konstantami (v Jave7 este nie su kontanty STANDALONE) a to cele vlozene aspectom namiesto aktualnej implementacie mi naozaj nesedia.

Použil bych reflexi na LONG_STANDALONE s fallbackem na LONG. Od toho ji Java umí.

perceptron

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #4 kdy: 07. 01. 2015, 08:44:24 »
Kód: [Vybrat]
import java.time.Month;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class Main {
public static List<String> getMonthNames() {
Locale locale = new Locale("sk");

List<String> monthNames = new ArrayList<String>();
for (Month month : Month.values()) {
monthNames.add(month.getDisplayName(TextStyle.FULL_STANDALONE,
locale));
}

return monthNames;
}

public static void main(String args[]) {

System.out.println(getMonthNames());
}
}


oni len opravili bug z roku 1999 :-)

akurat to opravili tak, ze pokazili stare aplikacie, v kazdom pripade ine riesenie, nez to, ktore navrhuje sten, neexistuje. podla vsetkeho ani joda-time nepomoze, lebo to delegovala na jdk

ono teda zalezi na tom, co chcete ziskat



Natix

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #5 kdy: 07. 01. 2015, 11:35:46 »
Hm, tak ten 310 backport se chová stejně blbě. Na JRE 6 a 7 vypisuje "leden", zatímco na 8 "ledna".

Natix

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #6 kdy: 07. 01. 2015, 11:54:06 »
Já vidím 2 možnosti, buď jak píšou předřečníci, mít 2 casy, pro jre 8 a pro starší. Není ale nutné používat reflexi, je to intová konstanta, takže lze použít přímo její hodnotu. Zjistit verzi jre za runtimu lze např. přes property java.version, jenom je třeba počítat s tím, že za 2 roky tu může být i verze 9.

Druhá možnost je to celé vochcat a místo leden, únor použít zkrácenou podobu led, ún anebo rovnou čísla. Je ale otázka, jestli se u nějakých divných jazyků neliší pády i těchto zkrácených forem.

oldies

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #7 kdy: 07. 01. 2015, 12:24:47 »
no a nepomohlo by treba zmenit poradi linkovanych knihoven a vlozit doprostred svoji vlastni, ve ktere bude implementovana korektne fungujici funkce?

/trololo

Natix

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #8 kdy: 07. 01. 2015, 13:16:45 »
no a nepomohlo by treba zmenit poradi linkovanych knihoven a vlozit doprostred svoji vlastni, ve ktere bude implementovana korektne fungujici funkce?

/trololo

Anebo:
Kód: [Vybrat]
String[] czechMonths = { "leden", "únor", "březen", ... };
/trololo

Sten

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #9 kdy: 07. 01. 2015, 13:24:30 »
Já vidím 2 možnosti, buď jak píšou předřečníci, mít 2 casy, pro jre 8 a pro starší. Není ale nutné používat reflexi, je to intová konstanta, takže lze použít přímo její hodnotu. Zjistit verzi jre za runtimu lze např. přes property java.version, jenom je třeba počítat s tím, že za 2 roky tu může být i verze 9.

Jak tu verzi budete parsovat, když je v nedefinovaném formátu? IMO je lepší místo parsování java.version zjistit přes reflexi, že to vaše JRE podporuje.

Natix

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #10 kdy: 07. 01. 2015, 14:36:33 »
Já vidím 2 možnosti, buď jak píšou předřečníci, mít 2 casy, pro jre 8 a pro starší. Není ale nutné používat reflexi, je to intová konstanta, takže lze použít přímo její hodnotu. Zjistit verzi jre za runtimu lze např. přes property java.version, jenom je třeba počítat s tím, že za 2 roky tu může být i verze 9.

Jak tu verzi budete parsovat, když je v nedefinovaném formátu? IMO je lepší místo parsování java.version zjistit přes reflexi, že to vaše JRE podporuje.

Tak alespoň property java.specification.version by mohla být jasně specifikovaná ("1.7", "1,8"). Anebo když už, tak už:

Kód: [Vybrat]
switch (SourceVersion.latest()) {
case RELEASE_6:
case RELEASE_7:
format = Calendar.LONG_FORMAT;
case RELEASE_8:
default:
format = 32770; // Calendar.LONG_STANDALONE
}

aaa

Re:Java - mesice (Oracle je !@#$%^)
« Odpověď #11 kdy: 08. 01. 2015, 01:57:02 »
Vdaka - nejak mi to nefunguje, ked sa jedna o pouzitie v cudzom kode (JCalendar), ale v mojom to vyzera trochu nadejne.