Datum Parsen

port29

deus.Server
Hallo Leute,

ich habe ein Datum, dass mir in folgendem Format vorliegt:

Code:
Mon Nov 19 00:00:00 UTC+0100 2007

Wie kann ich daraus ein Datum parsen?
 
Ich gehe mal aus das du das Datum so willst, wie wir es üblicherweiße schreiben: dd.mm.yyyy

Ich hab dir dazu mal ein kleines Programm geschrieben:

Java:
import java.util.HashMap;

public class DatenParser {
	
	private static Object[][] monatsobjekte = new Object[][]{
	{"Jan","1"},{"Feb","2"},{"Mar","3"},
	{"Apr","4"},{"Mai","5"},{"Jun","6"},
	{"Jul","7"},{"Aug","8"},{"Sep","9"},
	{"Okt","10"},{"Nov","11"},{"Dez","12"}};
	
	private static HashMap<String,String> monatsHM = new HashMap(); 
	
	public static void main(String[] args){
		fillMap();	// Erstellen der HashMap
		
		String datenstring = "Mon Nov 19 00:00:00 UTC+0100 2007";
		// Heraustrennen der Tage, Monate und des Jahres
		String tag = datenstring.substring(8, 10);
		String monat = datenstring.substring(4, 7);
		monat = monatsHM.get((String) monat);
		String jahr = datenstring.substring(29, 33);
		// Belegung und Ausgabe des neuen Datums
		datenstring = tag + "." + monat + "." + jahr;
		System.out.println(datenstring);
	}
	
	private static void fillMap(){
		for(int i = 0; i < monatsobjekte.length; i++){
			monatsHM.put((String)monatsobjekte[i][0], (String)monatsobjekte[i][1]);
		}
	}
}

Ich wollte es eigentlich mit dem SimpleDateFormat machen wie es Anime-Otaku vorgschlagen hat, aber da das SimpleDateFormat auf Date aufbaut und im Dateobjekt so gut wie alle Methoden @Deprecated sind hab ich das ganze mal "per Hand" gemacht.

Ich würde dennoch gern wissen wie es leichter (z.B. mit SimpleDateFormat") geht bzw. man mehr flexibilität reinbringt, da mein Ansatz vollkommen statisch ist.

Gruss Ben
 
Die Frage ist, was gewünscht ist....will man nur in ein Calendar oder Date Object parsen...oder den String konvertieren?

Java:
try{
String date = "the date";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date parsedDate = sdf.parse(date);
}catch(ParseException e ){
 System.err.println("Error while parsing date");
e.printStackTrace();
}

Nun das direkte umwandeln in ein anderes Format:
Java:
SimpleDateFormat newFormat = new SimpleDateFormat("yyyyy.MMMMM.dd");
String newDateString = newFormat.format(parsedDate);

oder über ein Calendar Objekt daraus erzeugen:

Java:
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(date.getTime());

int month = calendar.get(Calendar.MONTH);

P.S.: @kaMii...Hierbei könnte wenn der String nicht richtig ist unabgefangene Exceptions geworfen werden, die nicht wirklich was aussagen.
 
Zuletzt bearbeitet:
So in der Art hatte ich das alles schon, aber wie du schon gesagt hast war der String(Pattern) wohl nicht richtig.

Ich habe:
Java:
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy");

Und eigentlich denke ich auch das es das richtige Pattern für den von port29 vorgegebenen String wäre aber irgendwie isses das wohl doch nicht...

EDIT: Mit spezifizierten Pattern gehts:

Java:
		    SimpleDateFormat sdf = new SimpleDateFormat("EEE");
		      try {
				parsedDate = sdf.parse(datenstring, new ParsePosition(0));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(parsedDate);
			int day = calendar.get(Calendar.DAY_OF_WEEK);
			if(day == Calendar.MONDAY){
				System.out.println("Mon");
			}
 
Zuletzt bearbeitet von einem Moderator:
Zurück