String auf Inhalt überprüfen

  • Themenstarter Themenstarter mika
  • Beginndatum Beginndatum
M

mika

Gast
Huhu,

ich habe das hier
Java:
final SimpleDateFormat DATUM = new SimpleDateFormat(
				"yyyy-MM-dd-HH:mm:ss");

Letztlich steht dann das Datum in einem String.

Jetzt möchte ich diesen String irgendwie überprüfen, was da als yyyy oder ss drinsteht. Wie geht das? Weil einfach splitten funzt ja net, weil ich verschiedene "Trenner" hab.
 
Java:
String year = s.substring(0,4);
String ss = s.substring(s.length() - 2);
boundaries ohne Gewaehr

ansonsten direkt ueber das Datum gehen dass du auch hast wenn du formatierst....
 
ohne Regeln und Konzept kannst du genauso fragen 'wie interpretiert man einen Shakespeare-Roman mit Java?'

du musst schon genau sagen können, was du alles herausfinden möchtest usw.,
exakt welche Beispiele zu welchen Teilergebnissen führen sollen

zu Anfang läßt sich sagen: splitte nach allen -, :, Leerzeichen usw., das geht mit [c]split("[-: ]")[/c] und weiterer Aufzählung
 
Ein bisschen aufwändig, aber immerhin etwas:

Java:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;


public class Tester2
{
	public static void main(String[] args)
	{
		final SimpleDateFormat DATUM = new SimpleDateFormat("yyy-MM-dd-HH:mm:ss");
		Calendar cal = easterSunday(Calendar.getInstance().get(Calendar.YEAR));
		System.out.println(DATUM.format(cal.getTime()));

	}
	
	
  public static GregorianCalendar easterSunday( int year )
  {
   int i = year % 19;
   int j = year / 100;
   int k = year % 100;
   int l = (19 * i + j - (j / 4) - ((j - ((j + 8) / 25) + 1) / 3) + 15) % 30;
   int m = (32 + 2 * (j % 4) + 2 * (k / 4) - l - (k % 4)) % 7;
   int n = l + m - 7 * ((i + 11 * l + 22 * m) / 451) + 114;
   int month = n / 31;
   int day   = (n % 31) + 1;
   return  new GregorianCalendar( year, month - 1, day );
 }
}

Hier gefunden: Java ist auch eine Insel – 10.7 Calendar und GregorianCalendar
 
mhm warum gerade ein solches bsp ? [c]Calendar c = Calendar.getInstance();[/c] haets nicht getan ?

ausserdem hat das nicht wirklich was mit seinem Problem zu tun...
 
Ich denke was du suchst, sind Reguläre Ausdrücke. Kleines Beispiel:

Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DatumRegex {

	
	public static void main(String[] args) {
		
		String datum = "2012-03-01-12:29:52";
		String pattern = "(\\d{4})-(0{1}[1-9]{1}|1{1}[0-2]{1})-(0{1}[1-9]{1}|[1-2]{1}[0-9]{1}|3{1}[0-1]{1})-([0-1]{1}[0-9]{1}|2[0-3]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})";
		
		

		int jahr;
		int monat;
		int tag;
		int stunde;
		int minute;
		int sekunde;

		Pattern p = Pattern.compile(pattern);
		Matcher m = p.matcher(datum);

		if (m.matches()) {		
			
			jahr = Integer.parseInt(m.group(1));
			monat = Integer.parseInt(m.group(2));
			tag = Integer.parseInt(m.group(3));
			stunde = Integer.parseInt(m.group(4));
			minute = Integer.parseInt(m.group(5));
			sekunde = Integer.parseInt(m.group(6));			
			
			
			System.out.println("Der zu überprüfende String lautet: "	+ m.group(0));
			System.out.println("Wir befinden uns im Jahr " + jahr + " am " + tag + ". Tage des Monats " + monat + ". Die Stunde " + stunde + " hat geschlagen und ist " + minute + " Minuten und " + sekunde + " Sekunden alt." );
		} else {
			System.out.println("Das eingebene Datum ist ungültig.");
		}
	}
}
 
Wenn es wirklich nur um das herausfinden von Teilen geht, ist SlaterB's Ansatz mit dem Split der, meiner Meinung nach, beste Ansatz.

Willst du aber mehr damit anstellen, also zB vergleichen oder rechnen, dann solltest du dir das Calendar Object bzw. den
Code:
GregorianCalendar
anschauen, der gibt dir ein paar nette Methoden zur Hand.
 
Moin,

ich habe das hier
Java:
final SimpleDateFormat DATUM = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");

Letztlich steht dann das Datum in einem String.

Jetzt möchte ich diesen String irgendwie überprüfen, was da als yyyy oder ss drinsteht. Wie geht das? Weil einfach splitten funzt ja net, weil ich verschiedene "Trenner" hab

Nur mal so nebenbei: natürlich kannst Du das splitten, dann allerdings in zwei Schritten, bspw. erst nach ":" und dann die drei Teile im Ergebnis nach "-" 🙂

Gruß
Klaus
 
Cooles Beispiel TomGrill.

Aber ob Anfänger diese Zeile so schnell verstehen, wag ich zu bezweifeln:
Java:
String pattern = "(\\d{4})-(0{1}[1-9]{1}|1{1}[0-2]{1})-(0{1}[1-9]{1}|[1-2]{1}[0-9]{1}|3{1}
[0-1]{1})-([0-1]{1}[0-9]{1}|2[0-3]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})";
 
Vfl_Freak hat gesagt.:
Nur mal so nebenbei: natürlich kannst Du das splitten, dann allerdings in zwei Schritten, bspw. erst nach ":" und dann die drei Teile im Ergebnis nach "-"
Nö, geht auch alles auf einmal. Split erwartet nämlich eine Regex. Wenn die schlau genug gewählt ist, ist es ein Schritt. Welche das sein könnte? Siehe SlaterB's Post von 11:00.

P.S. Wie kann man eigentlich Posts verlinken?
 

Neue Themen


Zurück
Oben