Come ottenere l'ora e la data attuali su Android


1109

Come posso ottenere l'ora e la data attuali in un'app Android?


3
43 risposte! Mentre molti di loro erano buoni quando sono stati scritti, la buona risposta da usare nel 2018 è qui .
Ole VV,

Risposte:


1310

Puoi usare:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Ci sono molte costanti in Calendar per tutto ciò di cui hai bisogno.

Modifica:
controlla la documentazione della classe Calendar


14
+1 Questo è stato molto utile. Essere nuovi sono tutti questi piccoli bocconcini di cui abbiamo bisogno ... Sto usando Calendar per ottenere la data giuliana. Molto più facile che ottenere millisecondi e capire se il valore è uguale oggi;)
Bill Mote

9
Ma da dove viene la data e l'ora? il dispositivo Android si sta impostando?
Kyle Clegg,

12
@Kyle Sì, si basa sulle impostazioni dell'ora del dispositivo / fuso orario. Citazione dal documento : "Il metodo getInstance di Calendar restituisce un calendario le cui impostazioni internazionali si basano sulle impostazioni di sistema e i cui campi orari sono stati inizializzati con la data e l'ora correnti" - (sopra la prima riga del codice di campionamento nella documentazione della classe).

3
+1 questa soluzione ha una precisione di millisecondi, proprio quello di cui avevo bisogno.
Igor Zelaya,

42
Come dice @adamdport, questo in realtà non risponde alla domanda ... Calendar.getInstance().getTime()o Calendar.getInstance().getTimeInMillis()funzionerà.
Akousmata,

487

Puoi ( ma non dovresti più - vedi sotto!) Usare android.text.format.Time :

Time now = new Time();
now.setToNow();

Dal riferimento sopra collegato:

La classe Time sostituisce più rapidamente le classi java.util.Calendar e java.util.GregorianCalendar. Un'istanza della classe Time rappresenta un momento nel tempo, specificato con una seconda precisione.


NOTA 1: Sono passati diversi anni da quando ho scritto questa risposta, e parla di una vecchia classe specifica per Android e ora deprecata. Google ora afferma che "[t] la sua classe ha una serie di problemi e si consiglia di utilizzare GregorianCalendar ".


NOTA 2: anche se la Timeclasse ha un toMillis(ignoreDaylightSavings)metodo, questa è semplicemente una comodità passare a metodi che prevedono un tempo in millisecondi. Il valore del tempo è preciso solo per un secondo ; la porzione in millisecondi è sempre 000. Se in un ciclo lo fai

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

La sequenza risultante ripeterà lo stesso valore, ad esempio 1410543204000fino all'inizio del secondo successivo, a quel punto 1410543205000inizierà a ripetere.


2
@InsanityOnABun e Muhammad Babar. No, no, no. I documenti dicono "specificato con seconda precisione" Anche il test più semplice (ottenere l'ora corrente in un ciclo, toMillis e registrare / stampare il risultato) ti avrebbe mostrato che il tempo risultante ha 000 come millisecondo!
ToolmakerSteve

3
@IgorZelaya Se si desidera una precisione in millisecondi, probabilmente si sta eseguendo l' intervallo di tempo , piuttosto che l'ora del giorno. I documenti Android raccomandano SystemClock.uptimeMillis()per l'intervallo di tempo. Poiché questo è ciò che utilizza la maggior parte delle funzioni integrate, esiste una forte motivazione per la sua corretta implementazione su tutti i dispositivi. Vedi la discussione in SystemClock ... Se vuoi correlarlo con l'ora del giorno, in onResume dell'app, leggi sia questo, sia Time / setToNow / toMillis. Ricorda la differenza tra quelli.
ToolmakerSteve,

Non utilizzare la classe Time . Verrà rimosso in futuro e presenta molti problemi.
Sandy Chapman,

1
> Questa classe è stata deprecata nel livello API 22. Utilizzare invece GregorianCalendar. Vedi qui
Neo,

In realtà, è GregorianCalendarstato soppiantato anni fa in Java e successivamente in Android dalle classi java.time , in particolare ZonedDateTime. Per Android precedenti, vedere i progetti ThreeTen-Backport e ThreeTenABP .
Basil Bourque,

367

Se si desidera ottenere la data e l'ora secondo uno schema specifico, è possibile utilizzare quanto segue:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

O,

Data :

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

Tempo:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

Questo darà il tempo in UTC, dovrebbe adottare per i fusi orari.
Andras Balázs Lajtha,

10
Attenzione, SimpleDateFormat può essere problematico se le prestazioni sono un problema. Nella mia app avevo una vista personalizzata con circa 20 etichette HH: MM che rappresentavano tempi specifici (numeri interi lunghi che contengono millisecondi) e un numero uguale di risorse disegnabili. I test iniziali hanno mostrato che l'interazione non era fluida come volevo. Quando ho profilato su OnDraw () ho scoperto che le chiamate SimpleTimeFormatter impiegavano l'80% delle volte. In effetti, sto leggendo questa pagina come parte di una ricerca di un formattatore più efficiente e per saperne di più sui calendari, ecc.
William T. Mallard,

3
Sì, ma non più. Non avevo realizzato il sovraccarico in questione e avevo ipotizzato che fosse praticamente un POJO.
William T. Mallard,

32
In breve:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani,

4
è possibile inserire sdf.setTimeZone(TimeZone.getDefault())nel mezzo
Harvey

231

Per coloro che potrebbero preferire un formato personalizzato, è possibile utilizzare:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

Considerando che puoi avere modelli DateFormat come:

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

126

In realtà, è più sicuro impostare il fuso orario corrente impostato sul dispositivo Time.getCurrentTimezone(), altrimenti otterrai l'ora corrente in UTC.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Quindi, puoi ottenere tutti i campi data che desideri, ad esempio:

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

Vedi android.text.format.Time class per tutti i dettagli.

AGGIORNARE

Come molte persone sottolineano, Google afferma che questa classe ha una serie di problemi e non dovrebbe più essere utilizzata:

Questa classe presenta numerosi problemi e si consiglia di utilizzare GregorianCalendar.

Problemi conosciuti:

Per ragioni storiche, quando si eseguono calcoli temporali, tutta l'aritmetica avviene attualmente utilizzando numeri interi a 32 bit. Ciò limita l'intervallo di tempo affidabile rappresentabile dal 1902 al 2037. Per i dettagli, consultare l'articolo di Wikipedia sul problema dell'anno 2038. Non fare affidamento su questo comportamento; potrebbe cambiare in futuro. Chiamare switchTimezone (String) in una data che non può esistere, come un tempo di wall che è stato saltato a causa di una transizione DST, comporterà una data nel 1969 (ovvero -1, o 1 secondo prima del 1 ° gennaio 1970 UTC). Gran parte della formattazione / analisi presuppone il testo ASCII e non è quindi adatta per l'uso con script non ASCII.


Il tempo dovrebbe essere importato da quale pacchetto?
ManishSB,

Questa classe è stata deprecata nel livello API 22. Possiamo invece usare GregorianCalendar.
Choletski,

78

Per la data e l'ora correnti, utilizzare:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Quali uscite:

Feb 27, 2012 5:41:23 PM

ho la data, il giorno e l'ora correnti del sistema, ma l'ora non cambia. Non voglio aumentare il tempo di secondi in secondi.
Bhavesh Hirpara,

2
Questo è il modo consigliato di farlo, secondo l'API di Android: developer.android.com/reference/java/text/… Grazie!
M Granja,

58

Prova in questo modo Tutti i formati sono indicati di seguito per ottenere il formato di data e ora.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

primo

secondo terzo


53

tl; dr

Instant.now()  // Current moment in UTC.

…o…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

Dettagli

Le altre risposte, sebbene corrette, sono obsolete. Le vecchie lezioni di data e ora si sono dimostrate mal progettate, confuse e problematiche.

java.time

Quelle vecchie classi sono state soppiantate dal framework java.time .

Queste nuove classi sono ispirate al progetto Joda-Time di grande successo , definito da JSR 310 , e ampliato dal progetto ThreeTen-Extra .

Vedi il tutorial Oracle .

Instant

An Instantè un momento sulla linea temporale in UTC con risoluzione fino a nanosecondi .

 Instant instant = Instant.now(); // Current moment in UTC.

Fuso orario

Applica un fuso orario ( ZoneId) per ottenere un ZonedDateTime. Se si omette il fuso orario, l'attuale fuso orario predefinito della JVM viene applicato implicitamente. Meglio specificare esplicitamente il fuso orario desiderato / previsto.

Utilizzare i nomi propri fuso orario nel formato continent/region, come America/Montreal, Europe/Brusselso Asia/Kolkata. Non utilizzare mai le abbreviazioni di 3-4 lettere come ESTo ISTpoiché non sono né standardizzate né uniche.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tabella dei tipi di data e ora in Java, sia moderni che legacy

Generare stringhe

È possibile generare facilmente a Stringcome rappresentazione testuale del valore data-ora. Puoi scegliere un formato standard, un formato personalizzato o un formato localizzato automaticamente.

ISO 8601

È possibile chiamare i toStringmetodi per ottenere la formattazione del testo utilizzando lo standard ISO 8601 comune e ragionevole .

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Si noti che per ZonedDateTime, il toStringmetodo estende lo standard ISO 8601 aggiungendo il nome del fuso orario tra parentesi quadre. Informazioni estremamente utili e importanti, ma non standard.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Formato personalizzato

Oppure specifica il tuo particolare modello di formattazione con la DateTimeFormatterclasse.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Specificare un Localeper una lingua umana (inglese, francese , ecc.) Da utilizzare nella traduzione del nome del giorno / del mese e anche nella definizione di norme culturali come l'ordine dell'anno, il mese e la data. Si noti che Localenon ha nulla a che fare con il fuso orario.

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

Localizzazione di

Meglio ancora, lascia che java.time faccia il lavoro di localizzazione automatica.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

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, e SimpleDateFormat.

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

Per saperne di più, consulta 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. Utilizzare un driver JDBC conforme a JDBC 4.2 o successivo. Non c'è bisogno di stringhe, non c'è bisogno di java.sql.*classi.

Dove ottenere le classi java.time?

Tabella che elenca l'implementazione della tecnologia * java.time * da utilizzare su quali versioni di Java e Android.


2
@ giraffe.guru Rileggi la mia risposta. Ti sei perso il terzo proiettile. Gran parte della funzionalità java.time è trasferita su Java 6 e 7 in ThreeTen-Backport e ulteriormente adattata ad Android in ThreeTenABP .
Basil Bourque,

Instant.now()ed ZonedDateTime.now()è richiesto API 26
Ryde

2
@Ryde Come ho detto a giraffe.guru, rileggi la mia risposta. Cerca il terzo proiettile che menziona "Android".
Basil Bourque,

Credo che tu abbia ragione: la tua nuova tabella dell'edizione java.time trasmette il messaggio più direttamente e facilmente di un elenco puntato. Se fossi in me penso che complicherei ulteriormente le cose e metterei un segno di spunta tra parentesi (o qualcosa di simile) in ThreeTenBackport / Java 8+ e anche in ThreeTenABP / Android 26+ poiché queste combinazioni funzionano, solo che non c'è di solito non ha senso usarli. App Android in fase di sviluppo che utilizzano ThreeTenABP e mirano a una gamma di livelli API Android sia al di sotto che al livello 26. Mi sembra che gli sviluppatori scelgano bene in questi casi.
Ole VV,

1
@ OleV.V. Grazie per aver suggerito un segno di spunta secondario nella tabella grafica. L'ho usato nelle versioni successive della tabella. Molto migliorato
Basil Bourque,

52

Per ge l'ora corrente è possibile utilizzare System.currentTimeMillis()quale è standard in Java. Quindi puoi usarlo per creare una data

Date currentDate = new Date(System.currentTimeMillis());

E come menzionato da altri per creare un tempo

Time currentTime = new Time();
currentTime.setToNow();

13
Non c'è bisogno di System.currentTimeMillis(); new Date() fa semplicemente la stessa cosa .
Jonik,

@Jonik Cannot resolve constructor Date()in Android, l'SDK di Android utilizza una miscela di Java 6 e 7.
surfer190

1
Grazie. Date currentDate = new Date(System.currentTimeMillis());è corretto
mghhgm

@mghhgm No, new Date(System.currentTimeMillis())non è vero: (a) è ridondante, poiché è esattamente lo stesso di new Date(). (b) La java.util.Dateclasse problematica è ora soppiantata da java.time.InstantJava 8 e versioni successive. Back-porting su Java 6 e 7 nel progetto ThreeTen-Backport e su Android precedente (<26) in ThreeTenABP .
Basil Bourque,

37

Puoi usare il codice:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Produzione:

2014-11-11 00:47:55

Vedrete anche alcune ulteriori opzioni per SimpleDateFormatda qui .


Cordiali saluti, le vecchie e problematiche classi data-ora 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,

32

Semplice, è possibile sezionare l'ora per ottenere valori separati per l'ora corrente, come segue:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

Lo stesso vale per la data, come segue:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);

come posso ottenere la data per i prossimi 5-10 giorni ... è qui il calcolo manuale?
CoDe

@CoDe Usi Date per quello
FindOutIslamNow

27

Esistono diverse opzioni poiché Android è principalmente Java, ma se si desidera scriverlo in un textView, il codice seguente farebbe il trucco:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

8
Dovresti usare Calendaro GregorianCalendar. La Dateclasse è obsoleta.
Joseph Earl,

Grazie amico :) Non ne avevo idea
dLobatog

12
Secondo la documentazione di riferimento di Date () ( developer.android.com/reference/java/util/Date.html ) non c'è nulla che si riferisca alla classe Date () che è deprecata - tuttavia diversi metodi e costruttori sono deprecati.
Zac Seth,

2
Ciò produrrà risultati errati nel senso delle attuali impostazioni dell'utente (formato orario 12/24, ad esempio). Usa android.text.format.DateFormat.getTimeFormat (contesto di contesto) per ottenere DateFormat per le impostazioni utente correnti.
wonder.mice,

@Zac hai ragione anche il metodo getTime di Date è ancora più uso completo

24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Modelli di formato data

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone

1
Anche se anche altre risposte sono corrette. Mi è piaciuta questa risposta perché aiuta anche i problemi relativi al tempo. Grazie @Vighnesh KM
Ankit Gupta

17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);

15

Questo è un metodo che sarà utile per ottenere la data e l'ora:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

È possibile chiamare questo metodo e ottenere i valori di data e ora correnti:

2017/01//09 19:23

Non mi piace l'accoppiamento stretto tra logica di presentazione e logica di processo; Preferirei un metodo che esegue solo la formattazione e accetta un parametro di input della data. Inoltre, non capisco perché stai usando 2 SimpleDateFormatsecondi e 2 Datesecondi ... non puoi semplicemente utilizzare "yyyy/MM/dd HH:mm"come formato e chiamare il calendario una volta?
AjahnCharles,

12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Questo ti darà, ad esempio, 12:32.

Ricorda di importare android.text.format.Time;


12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);

12

Per la data e l'ora correnti con il formato, utilizzare

In Java

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

A Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

Modelli del formatore della data

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

Grazie per aver voluto contribuire. Stai contribuendo a qualcosa che non è già nelle precedenti 36 risposte? In ogni caso stai ancora usando la SimpleDateFormatclasse notoriamente problematica e obsoleta . Anche prima di Oreo non è necessario, puoi invece utilizzare ThreeTenABP , il backport di java.time, la moderna API di data e ora di Java.
Ole VV,

11

Puoi anche usare android.os.SystemClock. Ad esempio SystemClock.elapsedRealtime () fornirà letture più precise dell'orario quando il telefono è in modalità di sospensione.


10

Se hai bisogno della data corrente:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Se hai bisogno dell'ora corrente:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));

9

Per un formato personalizzato di data e ora:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

L'output è il seguente formato: 2015-06-18T10: 15: 56-05: 00


8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

8
Time now = new Time();
now.setToNow();

Prova che funziona anche per me.


8

È possibile ottenere la data utilizzando:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Questo ti darà un risultato in una buona forma, come in questo esempio: "2014/02/09".


Il costruttore senza parametri Time t = new Time();utilizzerà il fuso orario predefinito. Nella mia esperienza, default == corrente.
William T. Mallard,

7

Beh, ho avuto problemi con alcune risposte dell'API, quindi fondo questo codice, spero che serva loro ragazzi:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Uscita: 15:25 - 2017/10/03


7

Puoi semplicemente usare il seguente codice:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());

6

Prova questo

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

Questa è una soluzione perfetta ed elegante. È tutto ciò che serve, non soluzioni inutilmente lunghe come in altre risposte.
Zeeshan,

5

Di seguito il metodo restituirà la data e l'ora correnti in String, usa fuso orario diverso in base al fuso orario attuale. Ho usato GMT

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

4

È necessario utilizzare la classe Calender in base alla nuova API. La classe di data ora è obsoleta.

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);

4

Prova a usare il codice seguente:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
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.