Android, wie kann ich einen String in ein Datum konvertieren?


142

Ich speichere die aktuelle Zeit in der Datenbank jedes Mal, wenn die Anwendung vom Benutzer gestartet wird.

Calendar c = Calendar.getInstance();
    String str = c.getTime().toString();
    Log.i("Current time", str);

Auf der Datenbankseite speichere ich die aktuelle Zeit als Zeichenfolge (wie Sie im obigen Code sehen). Wenn ich es aus der Datenbank lade, muss ich es daher in das Date-Objekt umwandeln. Ich habe einige Beispiele gesehen, bei denen alle "DateFormat" verwendet hatten. Aber mein Format ist genau das gleiche wie das Datumsformat. Ich denke, es ist nicht nötig, "DateFormat" zu verwenden. Habe ich recht?

Gibt es überhaupt eine Möglichkeit, dieses String-to-Date-Objekt direkt umzuwandeln? Ich möchte diese gespeicherte Zeit mit der aktuellen Zeit vergleichen.

Vielen Dank

======> aktualisieren

Danke liebe Jungs. Ich habe folgenden Code verwendet:

private boolean isPackageExpired(String date){
        boolean isExpired=false;
        Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");        
        if (new Date().after(expiredDate)) isExpired=true;

        return isExpired;
    }

    private Date stringToDate(String aDate,String aFormat) {

      if(aDate==null) return null;
      ParsePosition pos = new ParsePosition(0);
      SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat);
      Date stringDate = simpledateformat.parse(aDate, pos);
      return stringDate;            

   }

Antworten:


419

Vom String zum Datum

String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {
    e.printStackTrace();  
}

Vom Datum zum String

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = new Date();  
    String dateTime = dateFormat.format(date);
    System.out.println("Current Date Time : " + dateTime); 
} catch (ParseException e) {
    e.printStackTrace();  
}

Genau - es ist besser, ein Standardformular auf die Datumszeichenfolge anzuwenden, bevor Sie sie in der Datenbank speichern. In diesem Fall en.wikipedia.org/wiki/ISO_8601
denis.solonenko

Für eine strengere Lösung für "String to Date" ist es praktisch, "format.setLenient (false)" hinzuzufügen. vor dem Versuch ... Block fangen. Auf diese Weise ist die Überprüfung eines zuvor korrekten Zeichenfolgendatums besser.
Alecs

Ich glaube nicht, dass dies SimpleDateFormat.format()eine Ausnahme
auslöst

2
Wenn Ihre SDK-Version größer oder gleich Marshmallow ist, verwenden Sie diese SimpleDateFormat dateFormat =new SimpleDateFormat(""yyyy-MM-dd'T'HH:mm:ss'Z'"", Locale.getDefault());
Dheeraj Jaiswal

8
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

2
Es ist nicht anzunehmen, String als Variable zu analysieren? Auf diese Weise wird versucht, das Wort "Zeichenfolge" zu analysieren.
Marco

6

Verwenden der SimpleDateFormat- oder DateFormat-Klasse durch

für zB

try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // here set the pattern as you date in string was containing like date/month/year
Date d = sdf.parse("20/12/2011");
}catch(ParseException ex){
    // handle parsing exception if date string was different from the pattern applying into the SimpleDateFormat contructor
}

4
     import java.text.ParseException;
     import java.text.SimpleDateFormat;
     import java.util.Date;
     public class MyClass 
     {
     public static void main(String args[]) 
     {
     SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");

     String dateInString = "Wed Mar 14 15:30:00 EET 2018";

     SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");


     try {

        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatterOut.format(date));

         } catch (ParseException e) {
        e.printStackTrace();
         }
    }
    }

hier ist Ihr Date - Objekt Datum und die Ausgabe ist:

Mi 14. März 13:30:00 UTC 2018

14. März 2018


Ich danke dir sehr!
Maryoomi1

1

Es könnte eine gute Idee sein, vorsichtig mit dem Gebietsschema umzugehen, von dem es c.getTime().toString();abhängt.

Eine Idee ist, die Zeit in Sekunden zu speichern (z . B. UNIX-Zeit ). Als intkönnen Sie es leicht vergleichen und dann einfach in einen String konvertieren, wenn Sie es dem Benutzer anzeigen.


1
String source = "24/10/17";

String[] sourceSplit= source.split("/");

int anno= Integer.parseInt(sourceSplit[2]);
int mese= Integer.parseInt(sourceSplit[1]);
int giorno= Integer.parseInt(sourceSplit[0]);

    GregorianCalendar calendar = new GregorianCalendar();
  calendar.set(anno,mese-1,giorno);
  Date   data1= calendar.getTime();
  SimpleDateFormat myFormat = new SimpleDateFormat("20yy-MM-dd");

    String   dayFormatted= myFormat.format(data1);

    System.out.println("data formattata,-->"+dayFormatted);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.