# String(pattern) von SimpleDateFormat auslesen



## H2SO3- (20. Jul 2009)

Hallo,

ich bekomme ein SimpleDateFormat und möchte gerne wissen mit welchen Variablen es erzeugt wurde. Hierbei vor allem das pattern also Beim Beispiel

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yy hh:mm aa", Locale.UK);

würde ich gerne wieder irgendwie an den String "dd-MM-yy hh:mm aa" herankommen. Hat hierzu jemand eine Idee?

Unter anderem (aber nicht nur) brauche ich es da ich zumteil Date's habe welche nur aus dem DAtumanteil bestehen. Also zb. 
"01-12-08"
hier fehlt nun der Zeitstempel. Ich muss sie dennoch mit dem obigen DateFormat parsen. Nun war meine Idee, wenn ich den String des SimpleDateFormats habe, kann ich rausfinden wie die Zeit gebildet ist und anschließend einen entsprechenden Zeitstempel erzeugen und ihn hinten drann hängen. Also in diesem Fall

"01-12-08" + " 00:00:00 am"

Die Methode ist nicht die schönste, allerdings fällt mir keine bessere ein. Wenn also auch hier jemand eine Idee hjat, währe ich seeeeehr interessiert sie zu höhren


----------



## Der Müde Joe (20. Jul 2009)

>würde ich gerne wieder irgendwie an den String

toPattern()

über den Calendar kann man direkt an Hour etc rankommen

EDIT:
ach...jetzt kapier ichs erst...anders rum


----------



## H2SO3- (20. Jul 2009)

toPattern() :-\ na auf die Idee hätte ich auch kommen können. Naja, vielen Dank 




Der Müde Joe hat gesagt.:


> >
> 
> über den Calendar kann man direkt an Hour etc rankommen
> 
> ...



das "anders rum" war das als lösung oder als feststellung gemeint?


----------



## Der Müde Joe (20. Jul 2009)

>war das als lösung oder als feststellung gemeint? 

Feststellung...musste das ganze nochmal lesen. Dachte du wolltest an die einzelnen Zahlen (Tag, Jahr,..)


----------



## H2SO3- (20. Jul 2009)

Ne das währe ja einfach. Denke mal der halbe Weg ist ja nun getan.

Muss halt irgendwie aus 
"01-12-08" --> "01-12-08 00:00:00 am" machen. Ansonnsten kann ich es ja schlecht parsen.
Nur halt entsprechend dem SimpleDateFormat wenn es also nicht
"dd-MM-yy hh:mm:ss aa" 
sondern
"dd-MM-yy hh-mm"
muss es halt zu "01-12-08 00:00" werden


----------



## Der Müde Joe (20. Jul 2009)

mal ein wenig dahingecoded...

```
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ReverseFormatTester {

	private String pattern;

	public ReverseFormatTester(String pattern) {
		this.pattern = pattern;
	}

	public Date parse(String date) {
		StringBuilder builder = new StringBuilder(this.pattern);

		int lenght = builder.length();
		while (lenght > 0) {
			try {
				SimpleDateFormat df = new SimpleDateFormat(builder.substring(0, lenght--));
				Date result = df.parse(date);
				return result;
			} catch (ParseException e) {
				// ignore
			}
		}
		return null;
	}

	public static void main(String[] args) {
		ReverseFormatTester df = new ReverseFormatTester("dd-MM-yy hh:mm aa");
		String date = "20-07-09 22";
		System.out.println(df.parse(date));
	}

}
```

(sonst fällt mir im Moment grad auch nix gescheiteres ein)


----------



## H2SO3- (20. Jul 2009)

mh, auch ne nette idee. Muss mal schaun, welche Version ich nehme. Erstmal vielen Dank für deine Ideen.


----------



## H2SO3- (21. Jul 2009)

Habe die idee leicht modifiziert übernommen. Habe noch einen test eingebaut, ob das zurückgewandelte Date mit dem input Date identisch ist. Sonnst gibt es Probleme wenn bei einem DatePattern der DAte teil Identisch ist, jedoch der zeitteil unterschiedlich ist.

```
static SimpleDateFormat modifieDateFormat(String date, SimpleDateFormat dateFormat)
    { 
        StringBuilder builder = new StringBuilder(dateFormat.toPattern());
        String testDate = "";
        Date tempDate = null;
        int lenght = builder.length();
        while (lenght > 0) {
            try {
                SimpleDateFormat df = new SimpleDateFormat(builder.substring(0, lenght--));
                tempDate = df.parse(date);
                testDate = df.format(tempDate);
                if(date.equals(testDate))
                { // only if the back formated Date is the same like the inputDate, the parsing worked
	                return df;
                }
                else
                {
                	return null;
                }
            } catch (ParseException e) {
                // ignore
            }
        }
        return null;
    }
```

hierbei ist mir allerdings aufgefallen, das ich für das neue SimpleDateFormat an sich noch das locale des alten SimpleDateFormat wissen müsste. Jemand ne Idee wie ich da rannkomme?? Kann dazu nichts finden. :-/


----------

