# string TT.MM.JJJJ parsen?



## partitionist (30. Januar 2007)

Hallo, wie kann man folgenden String parsen und in Int Werte setzen?


string str = 23.12.2007


----------



## Thomas Darimont (30. Januar 2007)

Hallo!

Schau mal hier:

```
package de.tutorials;

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

/**
 * <p>
 * TODO Description of the type
 * </p>
 * @author Thomas.Darimont
 */
public class DateParsingExample {

  /**
   * <p>
   * TODO Description of method
   * </p>
   * @param args
   */
  public static void main(String[] args) throws Exception {
    String str = "23.12.2007";
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    GregorianCalendar gregorianCalendar = new GregorianCalendar();
    gregorianCalendar.setTime(dateFormat.parse(str));
    System.out.println(gregorianCalendar.get(Calendar.YEAR));
    System.out.println(gregorianCalendar.get(Calendar.MONTH) + 1);
    System.out.println(gregorianCalendar.get(Calendar.DAY_OF_MONTH));
  }
}
```
Der Umgang mit Datums/Zeitwerten ist mit der Standard Java API seeeeehr mühsam...
mit joda-time ist das alles viel einfacher:
http://joda-time.sourceforge.net/

Gruß Tom


----------



## partitionist (30. Januar 2007)

Ich möchte nur die 3 werte in int werte speichern, damit ich diese später weiterverarbeiten kann.

String str = "23.12.2007";
int tag;
int monat;
int jahr;

//...parse 23, 12, 2007 
// tag = 23;
// monat = 12;
// jahr = 2007;

Bitte nochmals um Hilfe


----------



## KlaDi (30. Januar 2007)

Hi,

mit der Methode split(). Kannst Du sagen, das der String an dem Zeichen "." gesplittet werden soll. Das ganze schreibst Du in ein Stringarray und anschließend liest du die Werte aus dem Array in dein Intvariablen. Ich glaube es war Integer.parsInt(tag); um einen String in einen Integer zu wandeln.

Gruß KlaDi.


----------



## Laocoon (30. Januar 2007)

Oder du machst das über nen Scanner. Dann sparst du dir das umwandeln in int:


```
String date = "23.01.2007";
Scanner scn = new Scanner(date).useDelimiter("\\.");
        
int day = scn.nextInt();
int month = scn.nextInt();
int year = scn.nextInt();
        
System.out.println(day + "." + month + "." + year);
```

mfg
Daniel


----------



## partitionist (4. Februar 2007)

Wie kann man prüfen ob die Eingabe richtig ist, also es sollen folgende Eingabe vermieden werden:

*23.A5.2003   //A keine Zahl
23.02!2007   // ! statt .*


----------



## Thomas Darimont (7. Februar 2007)

Hallo!

schau mal hier:

```
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 *
 */
public class DateFormatMatcher {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String ddmmyyyyDateFormatRegex = "[0123]\\d\\.[01]\\d\\.\\d{4}";
        System.out.println("23.A5.2003".matches(ddmmyyyyDateFormatRegex));
        System.out.println("23.02!2007".matches(ddmmyyyyDateFormatRegex));
        System.out.println("23.05.2003".matches(ddmmyyyyDateFormatRegex));
    }
}
```
Wenn du eine "logische" Datumsprüfung brauchst könntest du folgendes machen:

```
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
        simpleDateFormat.setLenient(false);
        System.out.println(simpleDateFormat.parse("31.02.2005"));
```

Gruß Tom


----------

