Come posso ottenere la data corrente su Android?


165

Ho scritto il seguente codice

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

Ma mi sta chiedendo il parametro, voglio la data corrente in formato stringa,

piace

28-Dec-2011

in modo da poter impostare sopra TextView,

spiega un po ', se pensi che qualcosa sia necessario, sono nuovo nello sviluppo di Android.


1
Mentre l'uso della DateFormatclasse era OK quando questa domanda è stata posta nel 2011, quella classe e la sua sottoclasse SimpleDateFormaterano sempre problematiche e ormai obsolete. Ti consiglio di non usarli e di cercare invece java.time, la moderna API di data e ora di Java .
Ole VV,

Risposte:


389

È possibile utilizzare la SimpleDateFormatclasse per la formattazione della data nel formato desiderato.

Basta controllare questo link dove hai un'idea per il tuo esempio.

Per esempio:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

Aggiornare:

L'esempio dettagliato è qui , ti suggerirei di passare attraverso questo esempio e comprendere il concetto di classe SimpleDateFormat.

Soluzione finale:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);

potresti voler usare il metodo System.currentTimeMillis () o la classe Data invece della classe Calendar. Dovrebbe essere più veloce. stackoverflow.com/questions/368094/...
cjayem13

Ciò richiede API 24!
ueen,

Cordiali saluti, le classi data-ora terribilmente fastidiose come java.util.Date, java.util.Calendare java.text.SimpleDateFormatora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .
Basil Bourque,

@ueen Si prega di importare dal pacchetto Java non da Android.
Sadda Hussain,

Multe per lavori? Attualmente? (2020)
luke cross,

152

Il suo semplice codice di una riga per ottenere la data corrente in questo formato aaaa-MM-gg è possibile utilizzare il formato desiderato:

String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());

7
Dovresti cambiarlo in: String currentDate = new SimpleDateFormat ("dd-MM-yyyy", Locale.getDefault ()). Format (new Date ());
Bart Burg,

1
Wow grazie! Questo ha funzionato, anche se credo di aver scoperto perché la data sul mio dispositivo virtuale stava mostrando il giorno prima, probabilmente perché la data sulla macchina virtuale non era corretta. Quando testato su un vero telefono, ha funzionato a meraviglia. Quindi grazie @Pratik
Franchi wesley

30

Questo non ha nulla a che fare con Android in quanto è basato su Java in modo da poterlo usare

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}

Ci sono errori, il nuovo Date () richiede argomenti e si sta inizializzando DateFormat con SimpleDateFormat, anche non valido
Chatar Veer Suthar,

12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }

11

prova questo,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);

sta dicendo aggiungere argomenti alla nuova Data (lunga)
Chatar Veer Suthar,

in new Date (), non può chiedere il parametro long.
Lucifero,

Perché usi il keywork privato, esegui il tuo codice nel progetto Android, ottieni l'output?
Chatar Veer Suthar,

si prega di rimuovere quel "privato". Sì, ho l'output, vedo la tua discussione. Non so perché stai riscontrando problemi per una richiesta molto semplice.
Lucifero,


7

Funziona come un incantesimo e si converte in String come bonus;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);

5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// import Classe di date come java.util



4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());

4

Sto fornendo la risposta moderna.

java.time e ThreeTenABP

Per ottenere la data corrente:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

Questo ti dà un LocalDateoggetto, che è quello che dovresti usare per mantenere una data nel tuo programma. A LocalDateè una data senza ora del giorno.

Solo quando è necessario visualizzare la data a un utente, formattarla in una stringa adatta alle impostazioni internazionali dell'utente:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

Quando ho eseguito questo frammento oggi nella locale inglese americano, l'output era:

13 luglio 2019

Se lo desideri più corto, specifica FormatStyle.MEDIUMo anche FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateutilizza la locale di formattazione predefinita, quindi il punto è che fornirà un output adatto a quella locale, diverso per le diverse locali.

Se l'utente ha requisiti molto speciali per il formato di output, utilizzare una stringa di modello di formato:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13-يول -2019

Sto usando e raccomandando java.time, la moderna API di data e ora di Java. DateFormat, SimpleDateFormat, DateE Calendarutilizzato nella domanda e / o molte delle altre risposte, sono mal progettati e lunga superata. E java.time è molto più bello con cui lavorare.

Domanda: posso usare java.time su Android?

Sì, java.time funziona perfettamente su dispositivi Android più vecchi e più recenti. Richiede solo almeno Java 6 .

  • In Java 8 e versioni successive e su dispositivi Android più recenti (dal livello API 26) l'API moderna è integrata.
  • In Java 6 e 7 ottieni il ThreeTen Backport, il backport delle classi moderne (ThreeTen per JSR 310; vedi i link in basso).
  • Su (vecchi) Android usa l'edizione Android di ThreeTen Backport. Si chiama ThreeTenABP. E assicurati di importare le classi di data e ora org.threeten.bpcon i pacchetti secondari.

link


Ottima risposta! Ma come posso convertire ThreeTen LocalDateTime ad oggi? Sto usando Firebase e un prerequisito per il salvataggio del timestamp è l'oggetto Date.
H.Karatsanov,

@ H.Karatsanov Se si utilizza il backport: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Se si utilizza il java.time built-in: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Vedi Conversione tra java.time.LocalDateTime e java.util.Date . La risposta autorevole di JodaStephen è lì, e anche una risposta che mostra l'uso del backport .
Ole VV,

4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();

Sta contribuendo in modo sostanziale alla domanda ( voglio una data corrente in formato stringa, come28-Dec-2011 ) che non sia già presente nelle altre risposte? In ogni caso utilizza ancora la SimpleDateFormatclasse notoriamente problematica e obsoleta . Per favore, non abbiamo bisogno di altre risposte per farlo.
Ole VV,

funziona per le migliori pratiche aggiungere il secondo parametro locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy / MM / dd", Locale.ENGLISH);
Rucha Bhatt Joshi,

3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        

3

Una semplice modifica alla soluzione di Paresh:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);

3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);

2

È possibile utilizzare il seguente codice per ottenere una data nel formato desiderato.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

Nice one liner e funziona su Sdks inferiori. Alcuni caratteri più brevi DateFormat.format ("gg-MM-aaaa", nuovo java.util.Date ()). ToString ()
Jeffrey,

1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

Questa è la risposta migliore ...


0

Il modo più semplice per ottenere la data corrente nella locale corrente (locale del dispositivo!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

Se si desidera avere la data in diversi stili, utilizzare getDateInstance(int style) :

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

Altri stili: DateFormat.LONG,DateFormat.DATE_FIELD , DateFormat.DAY_OF_YEAR_FIELD, ecc (l'uso CTRL+Spaceper vedere tutti loro)

Se hai bisogno anche del tempo:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());

0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

0

prova con questo link di codice questa è la risposta assolutamente corretta per tutti i casi in tutta la data e l'ora. o personalizzare la data e l'ora in base alle necessità e ai requisiti dell'app.

prova con questo link. prova con questo link


0

Ho scritto l'app per il calendario usando CalendarView ed è il mio codice:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

Il campo "calendario" è il mio Calendario. importazioni:

import android.widget.CalendarView;
import java.util.Date;

Ho la data corrente senza errori.


0

Questo è il codice che ho usato:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);

0

Ho già usato questo:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

all'inizio ricevo l'ora, poi ho dichiarato un formato data semplice (per ottenere una data come: 19-6-2018), quindi uso il formato per cambiare la data in stringa.


0

solo un codice di riga per ottenere un semplice formato data:

SimpleDateFormat.getDateInstance().format(Date())

uscita: 18 maggio-2020

SimpleDateFormat.getDateTimeInstance().format(Date())

uscita: 18-mag-2020, 11:00:39

SimpleDateFormat.getTimeInstance().format(Date())

uscita: 11:00:39

Spero che questa risposta sia sufficiente per ottenere questo formato di data e ora ... :)


Per favore, non insegnare ai giovani a usare le classi SimpleDateFormate le DateFormatclassi obsolete e notoriamente problematiche . Almeno non come prima opzione. E non senza alcuna prenotazione. Oggi abbiamo molto meglio nella java.timemoderna API di data e ora di Java e nelle sue DateTimeFormatter. Sì, puoi usarlo su Android. Per Android meno recenti, vedi Come utilizzare ThreeTenABP in Progetto Android .
Ole VV,

-1

Questo è il codice che ho usato :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
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.