Risposte:
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
Calendar.getInstance().getTime()
o Calendar.getInstance().getTimeInMillis()
funzionerà.
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 Time
classe 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 1410543204000
fino all'inizio del secondo successivo, a quel punto 1410543205000
inizierà a ripetere.
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.
GregorianCalendar
stato 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 .
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
nel mezzo
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
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.
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
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);
Instant.now() // Current moment in UTC.
…o…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Le altre risposte, sebbene corrette, sono obsolete. Le vecchie lezioni di data e ora si sono dimostrate mal progettate, confuse e problematiche.
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.
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/Brussels
o Asia/Kolkata
. Non utilizzare mai le abbreviazioni di 3-4 lettere come EST
o IST
poiché 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 );
È possibile generare facilmente a String
come rappresentazione testuale del valore data-ora. Puoi scegliere un formato standard, un formato personalizzato o un formato localizzato automaticamente.
È possibile chiamare i toString
metodi 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 toString
metodo 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]
Oppure specifica il tuo particolare modello di formattazione con la DateTimeFormatter
classe.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Specificare un Locale
per 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 Locale
non 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 );
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.
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?
Instant.now()
ed ZonedDateTime.now()
è richiesto API 26
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();
Cannot resolve constructor Date()
in Android, l'SDK di Android utilizza una miscela di Java 6 e 7.
Date currentDate = new Date(System.currentTimeMillis());
è corretto
new Date(System.currentTimeMillis())
non è vero: (a) è ridondante, poiché è esattamente lo stesso di new Date()
. (b) La java.util.Date
classe problematica è ora soppiantata da java.time.Instant
Java 8 e versioni successive. Back-porting su Java 6 e 7 nel progetto ThreeTen-Backport e su Android precedente (<26) in ThreeTenABP .
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 SimpleDateFormat
da qui .
java.util.Date
, java.util.Calendar
e java.text.SimpleDateFormat
ora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .
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);
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);
Calendar
o GregorianCalendar
. La Date
classe è obsoleta.
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
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);
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
SimpleDateFormat
secondi e 2 Date
secondi ... non puoi semplicemente utilizzare "yyyy/MM/dd HH:mm"
come formato e chiamare il calendario una volta?
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);
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
SimpleDateFormat
classe 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.
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));
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
È 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".
Time t = new Time();
utilizzerà il fuso orario predefinito. Nella mia esperienza, default == corrente.
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
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());
Prova questo
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
È 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);
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);