Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              stringa di Java per data di conversione                                      13 risposte                          
  •     
    

Sto cercando di analizzare questa data con SimpleDateFormat e non funziona:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}

Se provo questo codice con strDate = "2008-10-14", ho una risposta positiva. Qual è il problema? Come posso analizzare questo formato?

PS. Ho avuto questa data da un jDatePicker e non c'è istruzioni su come modificare il formato della data che provo quando l'utente sceglie una data.

È stato utile?

Soluzione

Non si può pretendere di analizzare un appuntamento con una SimpleDateFormat che è impostato con un formato diverso.

Per analizzare la data stringa "Gio 18 Giu 20:56:02 EDT 2009" è necessario un SimpleDateFormat come questo (più o meno):

SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");

Usare questo per analizzare la stringa in una data, e poi l'altra SimpleDateFormat per trasformare quella Data nel formato che si desidera.

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...

JavaDoc: http://docs.oracle. com / JavaSE / 7 / docs / api / java / text / SimpleDateFormat.html

Altri suggerimenti

Il problema è che si dispone di una data formattata in questo modo:

Thu Jun 18 20:56:02 EDT 2009

Ma si utilizza un SimpleDateFormat che è:

yyyy-MM-dd

I due formati non sono d'accordo. È necessario costruire una SimpleDateFormat che corrisponde al il layout della stringa che si sta cercando di analizzare in una data. Fodera le cose per rendere più facile da vedere, si vuole un SimpleDateFormat in questo modo:

EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

Controlla la pagina JavaDoc ho collegato e vedere come vengono utilizzati i caratteri.

Ora abbiamo un modo più moderno di fare questo lavoro.

java.time

Il quadro java.time è fornito in bundle con Java 8 e successive. Vedere Tutorial . Queste nuove classi sono ispirati da Joda Time , definito da JSR 310 , ed esteso dal ThreeTen-Extra progetto. Si tratta di un grande miglioramento rispetto alle vecchie classi fastidiosi, java.util.Date/.Calendar et al.

Si noti che i 3-4 codici alfabetici come EDT non sono né standardizzati, né unica. li Evitare per quanto possibile. Imparare ad usare ISO 8601 formati standard invece. Il quadro java.time può prendere una pugnalata a tradurre, ma molti dei codici comunemente usati hanno valori duplicati.

A proposito, notare come java.time di default genera stringhe utilizzando l'ISO 8601 formati, ma esteso aggiungendo il nome del fuso orario tra parentesi.

String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );

Dump per consolare.

System.out.println ( "zdt : " + zdt );

Quando run.

  

zdt: 2009-06-18T20: 56: 02-04: 00 [America / New_York]

Regola fuso orario

Per il divertimento cerchiamo di regolare al fuso orario dell'India.

ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );
  

zdtKolkata: 2009-06-19T06: 26: 02 + 05: 30 [Asia / Kolkata]

Converti in j.u.Date

Se si ha realmente bisogno di un oggetto java.util.Date per l'utilizzo con le classi non ancora aggiornati per i tipi java.time, convertire. Si noti che si stanno perdendo il fuso orario assegnato, ma hanno lo stesso momento regolata automaticamente per UTC .

java.util.Date date = java.util.Date.from( zdt.toInstant() );

Come su getSelectedDate ? In ogni caso, in particolare sulla sua domanda di codice, il problema è con questa linea:

new SimpleDateFormat("yyyy-MM-dd");

La stringa che va nel costruttore deve corrispondere il formato della data. La documentazione per il modo per farlo è quello href="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html" qui . Sembra che avete bisogno di qualcosa di simile a "EEE MMM d hh: mm: ss zzz yyyy"

In risposta a: " Come convertire gio 13 Settembre 2016 00:00:00 GMT-0500 (Hora de verano centrale (Mexico)) a gg-mm-aa in Java? ", che è stato caratterizzato come duplicato

Prova questo: Con java.util.Date, java.text.SimpleDateFormat, si tratta di una soluzione semplice.

public static void main(String[] args) throws ParseException {

    String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))";
    Date f = new Date(fecha);

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("-5GMT"));
    fecha = sdf.format(f);
    System.out.println(fecha);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top