4 Stimmen

Gibt es einfache Möglichkeiten, ein Datum zu unformatieren?

Ich habe eine Reihe von Datumsangaben in diesem String-Format:

String datum = "Mi Sep 15 16:31:05 BST 2010";

und ich möchte es gerne wieder in ein Datum oder Kalenderobjekt umwandeln. Bevor ich das Rad neu erfinde, gibt es einfache Möglichkeiten, dies zu tun, die vorzugsweise im JDK vorhanden sind?

8voto

Bozho Punkte 570413

Mit SimpleDateFormat verwenden

String format = "EE MMM dd HH:mm:ss zz yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
Date result = sdf.parse(date);

Alternativ, wie von Jon Skeet vorgeschlagen, können Sie JodaTime's DateTimeFormat verwenden - das Muster sollte dasselbe sein. Es scheint jedoch, dass die Zeitzonen-Aliase BDT/BST/BDST von JodaTime nicht ordnungsgemäß unterstützt werden.

3voto

Jon Skeet Punkte 1325502

Nun, dafür ist java.text.DateFormat gedacht (insbesondere deren Unterklasse SimpleDateFormat) - aber persönlich würde ich vorschlagen, dass du stattdessen Joda Time verwendest.

Insbesondere ist Joda Times DateTimeFormatter Klasse threadsicher im Gegensatz zu SimpleDateFormat - du kannst also eine einzelne Instanz mit dem entsprechenden Muster erstellen und sie von jedem Thread aus verwenden. Außerdem fungiert die DateTimeFormat Klasse als Fabrik mit vielen voreingestellten Mustern in ISODateFormat. Oh, und die Kontrolle über die Zeitzone usw. ist mit Joda Time wesentlich besser.

Zu guter Letzt ist Joda Time einfach eine bessere API für Datum und Zeit. Nicht perfekt, aber sie ist viel besser als die integrierte Unterstützung für Date und Calendar in Java.

EDIT: Beim Versuch, deinen Beispielsstring zu analysieren, habe ich Schwierigkeiten mit dem "BST" Teil... zum Teil, weil das nicht wirklich eine vollständige Zeitzone ist (es ist nur der DST-Teil der Europe/London Zeitzone) und zum Teil, weil ich mit Joda Time nicht ganz das erreiche, was ich möchte... es scheint so, als hätte in diesem einen Fall SimpleDateFormat die Oberhand :(

1voto

jmj Punkte 232204

SimpleDateFormat

  public static void main(String[] args) {
 try {    String str_date="11-June-07";
         DateFormat formatter ; 
     Date date ; 
          formatter = new SimpleDateFormat("dd-MMM-yy");
              date = (Date)formatter.parse(str_date);    
               System.out.println("Today is " +date );
    } catch (ParseException e)
    {System.out.println("Exception :"+e);    }    

   }  

JodaTime

import org.joda.time.format.*;
import org.joda.time.*;

...    

String dateString = "2009-04-17 10:41:33";

// parse the string
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = formatter.parseDateTime(dateString);

// add two hours
dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants

System.out.println(dateTime);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X