Jak uzyskać odpowiedni dla kraju zapis daty ? U nas zapisuje się inaczej, w Stanach też.
Ok, Locale pomogą mi w przesunięciu czasowym, ale jak z formatowaniem daty ??? Która metoda konkretnie ?
rok-miesiąc-dzień u nas
rok-dzień-miesiąc w Stanach
coś podobnego
Tu masz klasę od tego: http://download.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html
Możesz poeksperymentować z indeksem poniższej tablicy, żeby dobrać najlepszy zestaw:
private static DateFormat[] formatyDat =
{
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT),
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT),
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM),
DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM),
DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL),
};
Przykładowe użycie:
System.out.println( "boot.log modified: " +
formatyDat[1].format( new Date( new File("/boot.log").lastModified() ) ) );
Ok, a da się to uzależnić od Locale ?
Bo teraz na sztywno wpisujesz "DateFormat.SHORT", ale skąd mam wiedzieć, czy dla danego kraju ma być SHORT, czy LONG ? Czy jakaś metoda jest to w stanie odgadnąć na podstawie Locale ?
Faktycznie - to jest zależne tylko od Locale. Jak ktoś na początku wskazywał. Niepotrzebnie wplątywałem parametry rozmiaru (SHORT, FULL etc) w poprzednim poście.
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.US)
Tyle wystarczy :). A potem
format.format(new Date())
Jak widzisz wystarczy poczytać javadoc. Co do wersji FULL, FULL, to jest to bardzo rozwlekły sposób, którego w praktyce niemal się nie używa. Najczęściej używane są SHORT, SHORT lub MEDIUM, SHORT. Jeżeli podajesz pełną datę, to zazwyczaj do niczego nie są potrzebne sekundy, a jak potrzebujesz sekund, to data ma zwykle mniejsze znaczenie i może być jak najkrótsza.
Co do Locale, to możesz próbować kontrolować w swojej aplikacji dla jakiego kraju ma pracować - ale moim zdaniem jest to nadmiar regulacji. To robi za Ciebie system operacyjny, który ma te ustawienia z założenia poprawne (jeżeli tak nie jest, to admin powinien ustawić to w systemie, a nie user w Twojej i każdej innej aplikacji). Dzisiaj praktycznie wszystkie systemy operacyjne obsługują lokalizację, więc nie ma potrzeby zabierać im tej funkcjonalności.
Jedyny sens w bawieniu się różnymi Locale jaki widzę, to parsowanie dat i czasów w sytuacji kiedy znasz kraj danych wejściowych i ewentualnie formaty daty i czasu. Program konwertujący dane daty/czasu z postaci tekstowej byłby dobrym przykładem. Można wtedy próbować testować parsowanie ze wszystkimi kombinacjami i poddać się dopiero, kiedy żadna kombinacja nie będzie poprawnie parsowana.