SimpleDateFormat und Locale

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

soweit ich das aus der API-Referenz ersehen konnte, kann man das Locale - Objekt nur bei der Konstruktion des SimpleDateFormat - Objekts angeben. Da ich aber nicht jedesmal, wenn sich die lokalen Einstellungen ändern, ein neues SimpleDateFormat - Objekt erzeugen will, würde ich gerne wissen, ob es doch einen Weg gibt das Locale - Objekt zu setzen, oder ob es eine Alternative zum SimpleDateFormat gibt, wo das möglich ist.

Danke!
 

abollm

Top Contributor
Alternativen gibt es (fast) immer. Es kommt darauf an, was du mit "Datum" anstellen möchtest.
Du kannst z.B. unabhängig von den locale Einstellungen das Datum in einer einheitlichen Form ausgeben.
 
G

Guest

Gast
Das Datum möchte ich in der Form "13-Okt-2004" ausgeben. Die Verwendung des Locale - Objekts hätte dann den Vorteil, dass für den Monat automatisch die richtigen Bezeichnungen verwendet werden ( z.B. für Deutsch: Okt bzw. für Englisch: Oct) ohne das ich das selbst über ein Resource Bundle verwalten muss.
 

abollm

Top Contributor
Grobes Vorgehen:

Kalender des (jeweiligen) Datums ausgeben, z.B.

Code:
      GregorianCalendar cal = new GregorianCalendar();

Datum nach deinen Wünschen formatiert ausgeben, z.B.:
Code:
     System.out.println(
       "Datum......: " +
       cal.get(Calendar.DATE) + "-" +
       (cal.get(Calendar.MONTH)+1) + "-" +
       cal.get(Calendar.YEAR)
     );

Dein geschildertes "Problem" mit dem einheitlichen Monatsnamen ist natürlich damit grundsätzlich auch lösbar.
 
G

Guest

Gast
Danke für Deine Antwort, aber diesen Ansatz hatte ich auch schon. Um das Monat in der jeweiligen Landessprache darzustellen, hab ich die Bezeichnungen in ein ResourceBundle gepackt, das beim Start der Anwendung bzw. beim Ändern der lokalen Einstellungen geladen wird. Gleich nach dem Laden des ResourceBundles hab ich die Monate in den Array "months" geschrieben und mit
Code:
months[cal.get(CalendarMONTH)]
darauf zugegriffen.
Als ich dann allerdings SimpleDateFormat entdeckt hatte, dachte ich, ich könnte mir diese Prozedur sparen. :wink:

Gruß,
--Alex
 

abollm

Top Contributor
Meinst du so etwas?

Code:
...
    Locale myLocale = Locale.getDefault(); // locale auf eigenem Rechner 
    Date d = new Date(); // aktuelles Datum
    DateFormat myDF = DateFormat.getDateInstance( DateFormat.MEDIUM, myLocale);
    //entweder SHORT, MEDIUM oder LONG
    DateFormat otherDF1 = DateFormat.getDateInstance( DateFormat.MEDIUM, Locale.CANADA_FRENCH);
    String myDateString = myDF.format(d);
    String foreignDateString = otherDF1.format(d);
    System.out.println( "\nMein Datum medium als String: "+myDateString);
    System.out.println( "Datum medium in Canada franz.: " + foreignDateString);
    DateFormat otherDF2 = DateFormat.getDateInstance( DateFormat.SHORT, Locale.US);
    foreignDateString = otherDF2.format(d);
    System.out.println( "Datum kurz in USA: " + foreignDateString);
...
 
G

Guest

Gast
Hallo,

bei der getDateInstance() - Methode wird aber auch jedesmal ein neues DateFormatObjekt erzeugt, d.h. es wäre egal, ob ich es auf diese Weise mache, oder immer ein neues SimpleDateFormat-Objekt erzeuge, wenn sich die lokalen Einstellungen ändern.
Ein weiterer Nachteil des DateFormat-Objekts ist, dass ich das Format nicht präzise angeben kann und somit nicht auf das Format in der Form "13-Okt-2004" komme.
 

abollm

Top Contributor
Stimmt, aber zunächst fällt mir keine Lösung des Problems ein. Vielleicht weiß ein anderer etwas dazu?
 

dotlens

Top Contributor
wenn du ein spezielles format ausgeben möchtest musst du dir wohl eine eigene Klasse schreiben....
 
G

Guest

Gast
Hallo,

ich denke ich werde wohl doch SimpleDateFormat verwenden und die Klasse halt immer neu instanzieren, wenn sich das Locale-Objekt ändert.

Danke nochmals für eure Antworten - ich kenne jetzt wohl so ziemlich alle Möglichkeiten einen Datumsstring zu erzeugen! :D

Grüsse,
--Alex
 

Bleiglanz

Gesperrter Benutzer
a) das mit dem neuInstanzieren ist i.A. kein Problem (teste doch mal, wieviele SimpleDateFormat - Instanzen du in 1 sec erzeugen kannst)

b) wenns sein muss, schreib dir so eine Art Registry, die die Objekte "poolt", hier mal etwas Pseudocode
Code:
DFReg
{
     private Map fmts = new HashMap();

     getDF(Locale loc)
     {
           SimpleDateFormat df = (SimpleDateFormat) fmts.get(loc);
           if(null!=df)
           {
               return df;
           }
           else
           {
               df = neues SimpleDateFormat(loc)
               fmts.put(loc,df)
               return df;
           }  
     }
}
im wesentlich ersetzt du damit die Objekterzeugung durch das Nachschlagen in einer Map, ob das wirklich schneller ist und nennenswerten Speicher spart müsste man erstmal testen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A SimpleDateFormat Wochentag Monat Allgemeine Java-Themen 11
B SimpleDateFormat oder doch lieber GregorianCalendar Allgemeine Java-Themen 3
L Validierung einer Zeichenkette für SimpleDateFormat Allgemeine Java-Themen 10
E SimpleDateFormat-Konvertierung funktioniert nicht Allgemeine Java-Themen 3
Grejak Date und SimpleDateFormat Allgemeine Java-Themen 6
R SimpleDateFormat Allgemeine Java-Themen 8
K SimpleDateFormat Fehler Allgemeine Java-Themen 3
T SimpleDateFormat.parse() liefert falschen Tag Allgemeine Java-Themen 2
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
N SimpleDateFormat: Unparseable date Allgemeine Java-Themen 5
G SimpleDateFormat Allgemeine Java-Themen 7
G SimpleDateFormat Allgemeine Java-Themen 10
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
A String zu Datum parsen - SimpleDateFormat Problem Allgemeine Java-Themen 8
I SimpleDateFormat Allgemeine Java-Themen 8
P SimpleDateFormat/Date Allgemeine Java-Themen 4
RaoulDuke Problem mit SimpleDateFormat Allgemeine Java-Themen 4
E XML dateTime String in Date mit SimpleDateFormat umwandeln Allgemeine Java-Themen 5
B SimpleDateFormat fehler? Allgemeine Java-Themen 2
thE_29 SimpleDateFormat ? Allgemeine Java-Themen 14
G SimpleDateFormat Allgemeine Java-Themen 5
N Problem mit SimpleDateFormat Allgemeine Java-Themen 14
S Input/Output Jave.utill.logging ohne Default-Locale also in Englisch Allgemeine Java-Themen 3
R Locale für Türkei nicht in standard -java ? Allgemeine Java-Themen 1
Ark Locale, Formatter und Scanner: Bug bei Gleitkommazahlen? Allgemeine Java-Themen 2
N BigDecimal falsch formatiert bei Locale.GERMANY Allgemeine Java-Themen 3
S ResourceBundle: Locale Datei in Jar finden Allgemeine Java-Themen 3
R Locale spezifische DateFormat Strings? Allgemeine Java-Themen 3
H2SO3- Date "18.11.2002 20:02:33" trotz Locale.GERMAN nic Allgemeine Java-Themen 9
B locale Montenegro (java 1.4.2) Allgemeine Java-Themen 6
D Locale mit JCombobox umschalten Allgemeine Java-Themen 19
A ResourceBundle ohne LOCALE funkt nicht. Allgemeine Java-Themen 4
I Locale Allgemeine Java-Themen 3
S Locale Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben