# Datum in Textfeld automatisch formatieren



## teh_raccoon (12. Apr 2007)

huhu 

Es geht um ein Textfeld, für ein Datum in der Vergangenheit. Der Benutzer ist sich gewohnt in der alten Applikation als Datum nur 03101987 einzutippen. Rauskommen soll nun ein formatiertes Datum. In diesem Beispiel also 03.10.1987. Nun habe ich einen FocusListener gebaut:


```
public void focusLost(FocusEvent evt) {
                // TODO Auto-generated method stub
               
                Object source = evt.getSource();
                if (source == erldatTextField){
                        String inErldat = erldatTextField.getText();
                        if (inErldat.length() == 8){
                                String day = inErldat.substring(0, 2);
                                String mon = inErldat.substring(2, 4);
                                String year = inErldat.substring(4, 8);
                                erldatTextField.setText(day + "." + mon + "." + year);
                        } else {
                                erldatTextField.setText("Ungülitg");
                        }

                       
                }
```

Allerdings ist diese Lösung nicht sehr optimal. Denn wenn der Benutzer nochmal in das Feld klickt und dann wieder rausgeht, wird das das Datum 03.10.1987 zu 03..1.0.19 (wegen substring). Ich fange ein solches Ergebnis ab mit der Bedingung, dass die Zeichenanzahl 8 sein muss, ansonsten wird "Ungültig" ausgegegeben.

Gibts da eine elegantere Methode, den Fehler zu handlen oder den String "03101987" in ein mit Punkten getrennten Datum auszugeben.


----------



## Wildcard (12. Apr 2007)

SimpleDateFormat


----------



## teh_raccoon (12. Apr 2007)

```
import java.util.*;
import java.text.*;
Date dt = new Date();
// Festlegung des Formats:
SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S" );
df.setTimeZone( TimeZone.getDefault() );                  // nicht mehr unbedingt notwendig seit JDK 1.2
// Formatierung zu String:
System.out.println( "Date = " + df.format( dt ) );        // z.B. '2001-01-26 19:03:56.731'
// Ausgabe für andere Zeitzone:
df.setTimeZone( TimeZone.getTimeZone( "Africa/Casablanca" ) );
System.out.println( "Casablanca = " + df.format( dt ) );  // z.B. '2001-01-26 18:03:56.731'
// Einlesen vom String:
dt = df.parse( "2001-02-03 04:05:06.7" );
System.out.println( "parse = " + df.format( dt ) );       // z.B. '2001-02-03 04:05:06.7'
```

Ich habe aber kein formatiertes Datum wie "yyyy-MM-dd HH:mm:ss.S". Und genau die konvertierung von "03101987" in "03.10.1987" macht mir ja mühe (siehe oben)

Wie kann ich also 03101987 in 03.10.1987 umwandeln?


----------



## Wildcard (12. Apr 2007)

SimpleDateFormat


----------



## Verjigorm (12. Apr 2007)

5. google treffer:

http://www.galileocomputing.de/openbook/javainsel6/javainsel_10_008.htm


```
SimpleDateFormat format = new SimpleDateFormat( "ddMMy" ); 
		try { 
			Date date = format.parse( "03101987" );
			System.out.println(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```

den rest schaffste sicher alleine


----------



## teh_raccoon (12. Apr 2007)

Verjigorm hat gesagt.:
			
		

> 5. google treffer:
> 
> http://www.galileocomputing.de/openbook/javainsel6/javainsel_10_008.htm
> 
> ...



Danke 

Edit: Ich bekomm das Datum trotzdem nicht richtig hin. Die Ausgabe ist *Sat Oct 03 00:00:00 CET 1987* und nicht das erwartete 03.10.1987  :bahnhof:


----------



## Ariol (12. Apr 2007)

```
SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yyyy" );
```

???


----------



## teh_raccoon (12. Apr 2007)

```
java.text.ParseException: Unparseable date: "03101987"
	at java.text.DateFormat.parse(Unknown Source)
	at archiv.ErfassenGUI.focusLost(ErfassenGUI.java:292)
	at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
	at java.awt.Component.processFocusEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at archiv.ErfassenGUI.focusLost(ErfassenGUI.java:299)
	at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
	at java.awt.Component.processFocusEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```

:S


----------



## Verjigorm (12. Apr 2007)

ich habs extra verlinkt ... ganz unten steht die Lösung wie es weitergeht .......
lesen bildet 


```
String st = "03101987";
		SimpleDateFormat format = new SimpleDateFormat( "ddMMy" ); 
		try { 
			Date date = format.parse(st);
			System.out.println(date);
			Calendar cal = Calendar.getInstance(); 
			cal.setTime( date ); 
			 
			DateFormat formater2 = DateFormat.getDateInstance( DateFormat.MEDIUM); 
			String s = formater2.format( cal.getTime() ); 
			System.out.println( s );
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```




			
				teh_raccoon hat gesagt.:
			
		

> Verjigorm hat gesagt.:
> 
> 
> 
> ...


----------

