2016-04-28 6 views
-3

Entschuldigung für die einfache Frage, aber ich recherchierte viel hier im Forum und keiner der oben genannten half mir. Ich habe ein Datum im String-Format "JJJJ-MM-TTTH: MM: SSZ" genau dieses Format in meiner Datenbank. Ich brauche nur das Jahr, den Monat und den Tag, um einen Vergleich mit einer anderen Saite zu machen. Am nächsten kam ich, dass es nicht funktioniert.bekomme nur Jahr Monat und Tag einer Zeichenkette JJJJ-MM-TTThh: mm: ssZ

String dateArracoamento = arracoamento.getDate(); 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = sdf.parse(dateArracoamento); 
String dateArracoamentoFormat = output.format(d); 

Zum Beispiel: Mein dateArracoamento = 2016-04-28T10: 10: 10Z. Ich muss nur 2016-04-28 und nicht das komplette Datum bekommen. Wie kann ich das machen?

+2

"es funktioniert nicht" ist * nie * genug Informationen. Was genau passiert? Bitte geben Sie eine [MCVE] an. –

+0

anscheinend kann er den Parser nicht ausführen, dann d = null –

+1

Sorry, ich verstehe nicht, was Sie meinen - und die Details sollten in der Frage sein. –

Antwort

1

Sie könnten der Lage sein, zu analysieren Diese Datumszeichenfolge verwendet dasselbe Formatierungsprogramm, das Sie zum Formatieren der Ausgabe verwenden.

String input = "2016-04-28T10:10:10Z"; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    String output = dateFormat.format(dateFormat.parse(input)); 
+0

Es funktioniert perfekt, danke hat mir sehr geholfen. Ich danke dir sehr. –

0

Sie bieten nicht viele Informationen, aber ...

Erstens, stellen Sie sicher, dass d nicht null ist und dass Sie jede Parsing Ausnahme abfangen, so dass Ihr String-Format Datum wurde korrekt analysiert. Dann schlage ich vor, Sie Kalender-Klasse zu verwenden, um Daten zu vergleichen, oder wie Sie wollen, erhalten das Jahr, Monat, Tag, etc ...

Überprüfen Sie folgendes Beispiel:

Date d = null; 
    try { 
     d = sdf.parse(dateArracoamento); 
     if (d != null) { 
      String dateArracoamentoFormat = output.format(d); 
      Calendar c = Calendar.getInstance(); 
      c.setTime(d); 
      c.get(Calendar.YEAR); 
      c.get(Calendar.MONTH); 
      c.get(Calendar.DAY_OF_MONTH); 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
0

Die anderen Antworten sind veraltet, mit alten Legacy-Klassen.

java.time

Die 8 in Java gebaut java.time Rahmen und verdrängt später die lästigen alten Datum Zeitklassen.

ISO 8601

Ihr Eingabestring geschieht in der Norm ISO 8601 zu sein.

Die Klassen java.time verwenden standardmäßig ISO 8601 Formate beim Analysieren/Generieren von String-Darstellungen von Datum-Uhrzeit-Werten. Sie müssen also kein Formatierungsmuster angeben.

Instant

Ein Instant stellt einen Moment auf der Zeitleiste in UTC mit einer Auflösung von nanoseconds.

Instant instant = Instant.parse("2016-04-29T22:04:07Z"); 

LocalDate

Die LocalDate Klasse stellt nur das Datum ohne Zeit-of-Tag und ohne Zeitzone. Um dorthin zu gelangen, wenden Sie einen Offset-from-UTC (ZoneOffset) an, um ein OffsetDateTime Objekt oder eine Vollzeitzone (ZoneId) zu erhalten, um eine ZonedDateTime zu erhalten.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 
LocalDate ld = zdt.toLocalDate(); 

Vielleicht wollten Sie wirklich bei UTC bleiben. Verwenden Sie die Konstante ZoneOffset.UTC.

OffsetDateTime odt = OffsetDateTime.ofInstant(instant , ZoneOffset.UTC); 
LocalDate ld = odt.toLocalDate(); 
Verwandte Themen