# String in Datum umwandeln mit SimpleDateFormat



## Meril (16. Mrz 2012)

Hallo.
Ich versuche zur Zeit als Teil eines Programmes einen String in ein Datum umzuwandeln .(StringToDate). Dabei gibt es 3 verschiedene Datumstypen (2 deutsche, 1 englisches) die erkannt werden müssen (Typen als enum in Mediatype definiert) und dann korrekt umgewandelt werden.

Quellcode - Teil einer Utility-Klasse
[Java]
	public DateType getDateType (String date){
		SimpleDateFormat formatter;
		try {
			formatter = new SimpleDateFormat("TT.MM.JJJJ");
			formatter.parse(date);
            return DateType.DE1;
        } catch (ParseException ex1) {
        	try {
        		formatter = new SimpleDateFormat("JJJJ-MM-TT");
        		formatter.parse(date);
                return DateType.DE2;
            } catch (ParseException ex2) {
            	try {
            		formatter = new SimpleDateFormat("MM/TT/JJJJ");
            		formatter.parse(date);
                    return DateType.EN;
                } catch (ParseException ex3) {
                	System.out.println("falsches Format");
                	return DateType.UNKNOWN;
                }
            }
        }
	}

	public Date StringToDate (String date)  {
		return StringToDate (date, getDateType(date));
	}

	public Date StringToDate (String date, DateType Type){
		SimpleDateFormat formatter = null;
		switch (Type) {
			case DE1: formatter = new SimpleDateFormat("TT.MM.JJJJ");
			case DE2: formatter = new SimpleDateFormat("JJJJ-MM-TT");
			case EN: formatter = new SimpleDateFormat("MM/TT/JJJJ");
		}
		try {
			return formatter.parse(date);
		} catch (ParseException e) {
			System.out.println("Parsefehler");
			e.printStackTrace();
			return null;
		}
	}[/Java]

Medientyp:

[Java]public enum DateType {
	DE1,
	DE2,
	EN,
	UNKNOWN
}

[/Java]
folgender mir unverständlicher Fehler tritt auf bei JUnit-Tests, der Quellcode lässt sich fehlerfrei mit Eclipse kompilieren:


```
java.lang.IllegalArgumentException: Illegal pattern character 'T'
	at java.text.SimpleDateFormat.compile(Unknown Source)
	at java.text.SimpleDateFormat.initialize(Unknown Source)
	at java.text.SimpleDateFormat.<init>(Unknown Source)
	at java.text.SimpleDateFormat.<init>(Unknown Source)
	at jverleihnix.ui.UtilDate.getDateType(UtilDate.java:19)
	at jverleihnix.ui.UtilDateTest.test(UtilDateTest.java:14)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
```

Kann mir jemand bei der Lösung meines Problemes helfen?


----------



## eRaaaa (16. Mrz 2012)

Wofür soll denn T stehen?  Tag ? Dann könnte d das sein was du suchst 
SimpleDateFormat (Java Platform SE 6)


----------



## Gast2 (16. Mrz 2012)

Es gibt kein 
	
	
	
	





```
T
```
 oder 
	
	
	
	





```
J
```
 beim SimpleDateFormat. Ne Liste findest du hier:
SimpleDateFormat (Java Platform SE 7 )


----------



## Meril (16. Mrz 2012)

Oh, dummer Fehler. Aber vielen Dank für die schnelle Antwort. Das Problem hat sich erledigt und der Fehler "Illegal pattern character 'T'" erscheint mir jetzt sinnvoll


----------

