Come convertire la data corrente in una stringa in java?


Risposte:



62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Preso da qui


Migliore risposta per l'utilizzo di Calendar invece di Date.
Casuale

5
Non ho capito bene. In quale universo è Calendarpiù desiderabile di Date?
jasonmp85

1
Cordiali saluti, queste classi fastidiose sono ora ereditate, soppiantate dalle classi java.time. Vedi Oracle Tutorial .
Basil Bourque

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Mi dispiace per l'eccesso di rendimento.
jasonmp85

2
Il formato utilizzato da quel metodo è terribile. Inoltre, l'attuale fuso orario predefinito di KVM viene applicato implicitamente, quindi i risultati varieranno. E queste classi fastidiose sono ora ereditate, soppiantate dalle classi java.time. Vedi Oracle Tutorial .
Basil Bourque


14

tl; dr

LocalDate.now()
         .toString() 

2017/01/23

Meglio specificare esplicitamente il fuso orario desiderato / previsto.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

Il modo moderno a partire da Java 8 e versioni successive è con java.time framework .

Specificare il fuso orario, poiché la data varia in tutto il mondo in un dato momento.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017/01/23

Per impostazione predefinita, ottieni una stringa nello standard ISO 8601 formato .

Per altri formati usa la java.time.format.DateTimeFormatterclasse.


Informazioni su java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date, Calendar, eSimpleDateFormat .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, vedere il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizza un driver JDBC compatibile con JDBC 4.2 o successivo. Non c'è bisogno di stringhe, non c'è bisogno di java.sql.*classi.

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval, YearWeek, YearQuartere altro .


9

Più veloce :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
Richiede org.apache.commons
Josiah Yoder,

1

Per l'ora come AAAA-MM-gg

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

E la libreria di DateTime è:

import org.joda.time.DateTime;


E da quale libreria DateTimeproviene? Una risposta su Stack Overflow dovrebbe avere qualche spiegazione in quanto questo sito è pensato per essere più di una libreria di frammenti.
Basil Bourque

0

La maggior parte delle risposte sono / erano valide. La nuova modifica dell'API JAVA per la gestione della data ha consentito di ridurre alcune precedenti ambiguità nella gestione della data in Java.

Riceverai un messaggio obsoleto per chiamate simili.

new Date() // deprecated

La chiamata precedente ha indotto lo sviluppatore a presumere che un nuovo oggetto Date fornirà all'oggetto Date il timestamp corrente. Questo comportamento non è coerente con altre classi API Java.

Il nuovo modo per farlo è usare l' istanza del calendario .

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

Anche qui la convenzione di denominazione non è perfetta ma è molto organizzata. Per una persona come me che ha difficoltà a rapinare le cose ma non dimenticherebbe mai qualcosa se suona / sembra logico, questo è un buon approccio.

Questo è più sinonimo di vita reale

  1. Otteniamo un oggetto Calendar e cerchiamo l'ora in esso. (Ti starai chiedendo che nessun corpo ottiene tempo da un calendario, ecco perché ho detto che non è perfetto, ma questo è un argomento completamente diverso)
  2. Quindi vogliamo la data in un semplice formato di testo, quindi utilizziamo una classe di utilità SimpleDateFormat che ci aiuta a formattare la data dal passaggio 1. Ho usato aaaa, MM, gg come parametri nel formato. Parametri di formato data supportati

Un altro modo per farlo è utilizzare Joda Time API

new DateTime().toString("yyyy-MM-dd")

o molto ovvio

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

entrambi restituiranno lo stesso risultato.


Cordiali saluti, le classi data-ora vecchi problematici, come java.util.Date, java.util.Calendare java.text.SimpleTextFormatora sono l'eredità , soppiantato dai java.time classi. Inoltre, il progetto Joda-Time è ora in modalità di manutenzione , con il team che consiglia la migrazione a java.time.
Basil Bourque

1
@BasilBourque Questo è ciò che intendevo nella mia risposta, che la risposta più votata è giusta ma non rilevante per uno sviluppatore di oggi. Infine java avrà una classe Clock e Clock.getTime () sarebbe molto più sensato e imitato dalla vita reale rispetto alle classi Date o DateTime o Time. Gli sviluppatori Java devono sapere che OOPS è iniziato come qualcosa che imita gli scenari della vita reale.
Swapnil Vargaonkar

Cordiali saluti, l' Clockimplementazione in Java 8 è esattamente la stessa delle classi legacy. Solo in Java 9 arriva una nuova implementazione, in grado di catturare il momento attuale con una risoluzione fino a nanosecondi.
Basil Bourque

Sì, questo è il motivo per cui ho scritto "finalmente" Java avrà una classe Clock che imiterà lo scenario della vita reale (concetto OOPS) e mostrerà / catturerà (nel modo in cui preferiresti dirlo) il momento attuale.
Swapnil Vargaonkar

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

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

            return dateObj;
        }

    }

1
Alcune spiegazioni su questo pezzo di codice sarebbero probabilmente utili.
Pyves

1
La risposta non è rilevante per la domanda. E no, non puoi passare la data in nessun Stringformato alla tua funzione.
Jerin Joseph,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.