2017-04-20 1 views
-1

Problem:Wie String zu Datum mit FastDateFormat in einem angegebenen Format zu analysieren

Ich muss die angegebene Anzahl von Tagen in einem bestimmten Datum hinzufügen. Die Funktion sollte Date-Klasse Object zurückgeben und FastDateFormat verwenden.

Lösung:

schrieb ich den Code aber ich brauche die Ausgabe in yyyy-MM-dd HH: mm: ss.

Wenn ich pass Eingabe dieser Funktion

public static void main(String[] args) throws ParseException { 
    String dateFormat="yyyy-MM-dd HH:mm:ss"; 
     String s2=addDate(dateFormat); 
     convertStringToDate(s2,dateFormat); 

    } 
    public static Date convertStringToDate(String dateInStr, String dateFormat) throws ParseException 
    { 
     FastDateFormat fdf=FastDateFormat.getInstance(dateFormat);//("yyyy-MM-dd HH:mm:ss"); 
     Date date = null; 
     date = fdf.parse(dateInStr); 
     System.out.println("From convertStringToDate "); 
     System.out.println(date); 
     return date; 
    } 
public static String addDate(String dateFormat) throws ParseException{ 
      FastDateFormat fdf=FastDateFormat.getInstance(dateFormat); 
      Calendar c = Calendar.getInstance();  
      c.add(Calendar.DATE,1); 
      String s1=fdf.format(c.getTime()); 
      System.out.println("From addDate "); 
      System.out.println(s1); 
      return s1; 
     } 

Erwartete Ausgabe von convertStringToDate:

2017-04-21 17:01:31

OutputShown von convertStringToDate:

Fri Apr 21 17:01:31 IST 2017 

Kann jemand führen Wie soll ich das obige Problem lösen?

+0

Wo drucken Sie das Datum? Da Sie eine Date-Instanz zurückgeben, gibt es hier kein Format. Drucken Sie 'fdf.format (c.getTime());', um die korrekte Ausgabe zu sehen – AxelH

+2

Ihre Anforderungen ergeben keinen Sinn, sorry. Wenn Sie das Datum in einem bestimmten Format (z. B. "2017-04-21 13: 16: 13") zurückgeben müssen, müssen Sie eine "Zeichenfolge" zurückgeben. Sie können kein bestimmtes Format mit einem "Datum" angeben . Vielleicht, wenn Sie uns sagen, warum Sie das wollen, könnten wir Sie in eine nützliche Richtung führen. –

+1

Obwohl 'FastDateFormat' einige Vorteile gegenüber' SimpleDateFormat' zu haben scheint, empfehle ich im Jahr 2017 die neueren Java Datums- und Zeitklassen, einschließlich 'DateTimeFormatter', die ebenfalls Thread-sicher sind. –

Antwort

2

Die letzten beiden Zeilen Ihrer Methode keinen Sinn machen:

fdf.format(c.getTime()); 
return fdf.parse(fdf.format(c.getTime())); 

Die format Methode gibt Ihr Datum als String formatiert. In der ersten Zeile rufen Sie format, aber Sie tun nichts mit dem Rückgabewert. Also, effektiv macht diese Linie nichts.

In der zweiten Zeile formatieren Sie zuerst das Datum in eine Zeichenfolge, und dann parsen Sie die Zeichenfolge sofort erneut in ein Date Objekt. Das macht auch effektiv nichts. Sie hätten genauso gut return c.getTime(); schreiben können.

Beachten Sie, dass Date Objekte kein eigenes Format haben. Sie können kein Date-Objekt verwenden, das sich automatisch in einem bestimmten Format ausgibt, z. B. yyyy-MM-dd HH:mm:ss, da das Objekt Date selbst nichts über die Formatierung selbst weiß.

Stattdessen sollten Sie das FastDateFormat Objekt verwenden, um das Date Objekt zu einem String, zu formatieren und dann drucken Sie diese Zeichenfolge. Beispiel:

String text = fdf.format(c.getTime()); 
System.out.println(text); 
0

In den folgenden Zeilen werden das Datum und die Uhrzeit in dem von Ihnen gewünschten Format gedruckt.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.DATE,1); 
    System.out.println(dateFormat.format(cal.getTime())); 
+0

Die Anforderungen waren: "Die Funktion sollte Datum Klasse zurückgeben Objekt und sollte FastDateFormat verwenden. "Ihr Code tut wirklich nicht. –

+0

Entschuldigung, dass ich die erste Zeile nicht gesehen habe (: –

0

Ihr Problem in diesen Zeilen Code:

fdf.format(c.getTime()); 
return fdf.parse(fdf.format(c.getTime())); 

Ihr Ziel ist einfach nur zu erreichen, müssen format() Methode verwenden, die eine Date in ein Datum/Zeit-String formatiert wird:

String date = fdf.format(c.getTime()); 

Lösung wird sein:

public static String addDate(String dateFormat){ 
     FastDateFormat fdf=FastDateFormat.getInstance(dateFormat); 
     Calendar c = Calendar.getInstance(); 
     c.add(Calendar.DATE,1); 
     String date = fdf.format(c.getTime()); 
     return date; 
} 
0

Wenn Sie zurückgeben, geben Sie ein date-Objekt zurück und Sie können das Date-Objekt formatieren, aber dann würden Sie die Ausgabe als String erhalten. Das Format des Datumsobjekts wäre konstant.

Bei Verwendung von FastDateFormat- fdf.format (c.getTime()). Dieser Teil gibt Ihnen das Format des Datums als String und das erforderliche Format, das Sie benötigen, aber wenn Sie es analysieren und in Date Object konvertieren, würde es das vorherige konstante Format haben.

Sie können das FastDateFormat verwenden, um die formatierte Ausgabe eines Datums als Zeichenfolge abzurufen, das Datumsobjekt nicht zu formatieren.

diese Prüfung für eine weitere Referenz out - Date Formatting

Wenn Sie ein Simple Objekt erstellen, können Sie ein Muster String angeben. Der Inhalt des Patterns String bestimmt das Format von Datum und Uhrzeit.

Der Code formatiert ein Datum und eine Uhrzeit gemäß dem Muster String, das an den SimpleDateFormat-Konstruktor übergeben wird. Der von der format-Methode zurückgegebene String enthält das formatierte Datum und die Uhrzeit, die angezeigt werden sollen.

-from Oracle Docs. 
Verwandte Themen