# SimpleDateFormat



## RungetSvohu (1. Aug 2012)

Hallo,

ich habe eine kleine Frage zur Klasse 
	
	
	
	





```
SimpleDateFormat
```
. Ich habe hier eine nette Instanz:

```
new SimpleDateFormat("HH:mm, d. MMM. yyyy", Locale.GERMAN);
```
Das Problem ist folgendes: Der Punkt nach MMM steht ja für die Abkürzung des Monatsnamen. Es gibt aber einen Monat, den Mai, mit nur drei Buchstaben. Also speziell für den Mai sollte es lieber so aussehen:

```
new SimpleDateFormat("HH:mm, d. MMM yyyy", Locale.GERMAN);
```
Lässt sich das mit einem 
	
	
	
	





```
SimpleDateFormat
```
 machen oder muss ich die Fallunterscheidung immer manuell vornehmen?

Zusatzfrage: Was ist eigentlich der Unterschied zwischen 
	
	
	
	





```
Locale.GERMAN
```
 und 
	
	
	
	





```
Locale.GERMANY
```
?


----------



## SlaterB (1. Aug 2012)

SimpleDateFormat ist dazu begrenzt, du brauchst zwei oder vorher einen modifizierten String, z.B. immer alle Punkte entfernen,

GERMAN mag für den deutschsprachigen Raum an sich stehen, kein spezifisches Land ausgewählt,
was das aber letzlich alles bewirkt kann ich nicht sagen

```
Locale:
static public final Locale GERMAN = new Locale("de","","");
static public final Locale GERMANY = new Locale("de","DE","");
```


----------



## mla.rue (2. Aug 2012)

ist der Punkt da notwendig? Kann mich nicht erinnern, je eine Abkürzug von Monaten (bzw auch Wochentagen) mit einem Punkt gesehen zu haben.... Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez... Mo Di Mi Do Fr Sa So... Nur so ein Gedanke halt, ein "01. Jan. ####" habe ich noch nicht gesehen.


----------



## Templarthelast (2. Aug 2012)

```
If(new SimpleDateFormat("MMM", Locale.GERMAN).format(date).equals("Mai")) {
// gib new SimpleDateFormat("HH:mm, d. MMM yyyy", Locale.GERMAN); aus
}else {
// gib new SimpleDateFormat("HH:mm, d. MMM. yyyy", Locale.GERMAN); aus
}
```


----------



## Mujahiddin (3. Aug 2012)

Ich finde den Punkt auch... fremd.

Übrigens würde ich bei der Stundenzahl nicht "HH" verwenden, sondern "kk". "HH" geht nur von 0 - 12, "kk" von 0 - 24.
Kommt natürlich darauf an, was du willst.


----------



## ThreadPool (3. Aug 2012)

mla.rue hat gesagt.:


> [...] "01. Jan. ####" habe ich noch nicht gesehen.



Die Abkürzung des Monats ist aber korrekt, diese Abkürzungen für Monate inkl. Punkt finden sich auch so im Duden. Im Fließtext sollte der Monatsname jedoch ausgeschrieben werden. Des Weiteren ist die führende Null bei einstelligen Tagesangaben in diesem Format zu entfernen. Soweit es nach der DIN 5008 (Schreib- und Gestaltungsregeln für Textverarbeitung) festlegt. Ein "1. Jan. ####" ist also durchaus anwendbar und von mir zumindest auch schon erspäht, häufiger trifft man jedoch die Variante "1. Januar ####".


----------



## FArt (3. Aug 2012)

Mujahiddin hat gesagt.:


> Ich finde den Punkt auch... fremd.
> 
> Übrigens würde ich bei der Stundenzahl nicht "HH" verwenden, sondern "kk". "HH" geht nur von 0 - 12, "kk" von 0 - 24.
> Kommt natürlich darauf an, was du willst.



HH geht von 0-23, kk von 1-24.

SimpleDateFormat (Java 2 Platform SE v1.4.2)


----------



## IMartin (4. Aug 2012)

Nur so als Möglichkeit:

```
String[] shortMonths = new String[]{
		"Jan.", "Feb.", "Mrz.", "Apr.", "Mai", "Jun.",
		"Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Dez."
};

SimpleDateFormat format = new SimpleDateFormat("d. MMM yyyy", Locale.GERMAN);
DateFormatSymbols symbols = format.getDateFormatSymbols();

symbols.setShortMonths(shortMonths);
format.setDateFormatSymbols(symbols);
```


----------



## tagedieb (4. Aug 2012)

Als Alternative kann ich noch eine Regex Loesung anbieten, dabei werden alle Buchstaben, die laenger als 3 sind auf 3 Stellen gekuerzt:


```
DateFormat df = new SimpleDateFormat("HH:mm, d. MMMM yyyy",	Locale.GERMAN);
		String date = df.format(new Date(112,4,1)); // 1. Mai 2012
		String newDate = date.replaceFirst("(\\p{Alpha}{3})\\p{Alpha}{1,}",	"$1.");
		System.out.println(newDate);
		date = df.format(new Date());
		newDate = date.replaceFirst("(\\p{Alpha}{3})\\p{Alpha}{1,}",	"$1.");
		System.out.println(newDate);
```


----------

