Obtener la fecha y hora actual en Android

¿Cómo puedo obtener la hora y fecha actual en una aplicación de Android?

Podrías usar:

import java.util.Calendar Date currentTime = Calendar.getInstance().getTime(); 

Hay muchas constantes en el Calendario para todo lo que necesita.

Editar:
Verificar la documentación de la clase Calendario

Puedes ( pero ya no deberías , ¡mira abajo!) Usar android.text.format.Time :

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

De la referencia vinculada anteriormente:

La clase Time es un reemplazo más rápido para las clases java.util.Calendar y java.util.GregorianCalendar. Una instancia de la clase Time representa un momento en el tiempo, especificado con una segunda precisión.


NOTA 1: Han pasado varios años desde que escribí esta respuesta, y se trata de una clase antigua, específica de Android y ahora obsoleta. Google ahora dice que “[t] su clase tiene una serie de problemas y se recomienda usar GregorianCalendar en su lugar”.


NOTA 2: Aunque la clase Time tiene un toMillis(ignoreDaylightSavings) , esto es simplemente una conveniencia para pasar a métodos que esperan tiempo en milisegundos. El valor de tiempo es solo preciso a un segundo ; la porción de milisegundos siempre es 000 . Si en un bucle lo haces

 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 secuencia resultante repetirá el mismo valor, como 1410543204000 , hasta que haya comenzado el segundo, en cuyo momento 1410543205000 comenzará a repetirse.

Si desea obtener la fecha y la hora en un patrón específico, puede usar lo siguiente:

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

Para aquellos que prefieren un formato personalizado, puede usar:

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

Mientras que puede tener patrones de DateFormat tales como:

 "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 

En realidad, es más seguro configurar la zona horaria actual configurada en el dispositivo con Time.getCurrentTimezone() , de lo contrario obtendrá la hora actual en UTC.

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

Luego, puede obtener todos los campos de fecha que desee, como, por ejemplo:

 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 

Consulte la clase android.text.format.Time para obtener todos los detalles.

ACTUALIZAR

Como muchas personas señalan, Google dice que esta clase tiene varios problemas y que ya no se debe usar:

Esta clase tiene varios problemas y se recomienda usar GregorianCalendar en su lugar.

Problemas conocidos:

Por razones históricas cuando se realizan cálculos de tiempo, toda la aritmética se lleva a cabo actualmente utilizando enteros de 32 bits. Esto limita el rango de tiempo confiable representable desde 1902 hasta 2037. Consulte el artículo de la wikipedia sobre el problema del año 2038 para más detalles. No confíes en este comportamiento; puede cambiar en el futuro Llamar a switchTimezone (String) en una fecha que no puede existir, como un tiempo de pared que se omitió debido a una transición DST, dará como resultado una fecha en 1969 (es decir, -1 o 1 segundo antes del 1 de enero de 1970 UTC). Gran parte del formateo / análisis asume el texto ASCII y, por lo tanto, no es adecuado para usar con scripts que no sean ASCII.

Para la fecha y hora actual, use:

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

Qué salidas:

 Feb 27, 2012 5:41:23 PM 

Pruebe de esta manera Todos los formatos se dan a continuación para obtener el formato de fecha y hora.

  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); 

primero

segundo tercero

Para calcular la hora actual, puede usar System.currentTimeMillis() que es estándar en Java. Entonces puedes usarlo para crear una fecha

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

Y como lo mencionaron otros para crear un tiempo

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

Puedes usar el código:

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

Salida:

 2014-11-11 00:47:55 

También obtendrá algunas más opciones de formato para SimpleDateFormat desde aquí .

Fácil, puede diseccionar el tiempo para obtener valores separados para la hora actual, de la siguiente manera:

 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 mismo ocurre con la fecha, de la siguiente manera:

 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); 

tl; dr

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

…o…

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

Detalles

Las otras respuestas, aunque son correctas, están desactualizadas. Las antiguas clases de fecha y hora han demostrado estar mal diseñadas, confusas y problemáticas.

java.time

Esas antiguas clases han sido suplantadas por el framework java.time .

  • Java 8 y posterior: el marco java.time está integrado.
  • Java 7 y 6: utiliza el backport de java.time .
  • Android: use esta versión envolvente de ese backport .

Estas nuevas clases están inspiradas en el exitoso proyecto Joda-Time , definido por JSR 310 , y ampliado por el proyecto ThreeTen-Extra .

Vea el Tutorial de Oracle .

Instant

Un Instant es un momento en la línea de tiempo en UTC con una resolución de hasta nanosegundos .

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

Zona horaria

Aplique una zona horaria ( ZoneId ) para obtener un ZonedDateTime . Si omite la zona horaria, se aplica implícitamente la zona horaria predeterminada actual de su JVM. Es mejor especificar explícitamente la zona horaria deseada / esperada.

Use los nombres de zona horaria adecuados en el formato continent/region , como America/Montreal , Europe/Brussels o Asia/Kolkata . Nunca use las abreviaturas de 3-4 letras, como EST o IST ya que no están estandarizadas ni son únicas.

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

Generando cadenas

Puede generar fácilmente una String como una representación textual del valor de la fecha y hora. Puede ir con un formato estándar, su propio formato personalizado o un formato localizado automáticamente.

ISO 8601

Puede llamar a los métodos toString para obtener el formato de texto utilizando el estándar ISO 8601 común y sensible.

 String output = instant.toString(); 

2016-03-23T03: 09: 01.613Z

Tenga en cuenta que para ZonedDateTime , el método toString amplía el estándar ISO 8601 al agregar el nombre de la zona horaria entre corchetes. Información extremadamente útil e importante, pero no estándar.

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

Formato personalizado

O especifique su propio patrón de formateo particular con la clase DateTimeFormatter .

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

Especifique una Locale para un idioma humano (inglés, francés , etc.) que se utilizará para traducir el nombre de día / mes y también para definir las normas culturales, como el orden del año, el mes y la fecha. Tenga en cuenta que Locale no tiene nada que ver con la zona horaria.

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

Localizando

Mejor aún, deje que java.time haga el trabajo de localizar automáticamente.

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

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases heredadas de fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

Puede intercambiar objetos java.time directamente con su base de datos. Use un controlador JDBC que cumpla con JDBC 4.2 o posterior. Sin necesidad de cadenas, sin necesidad de clases java.sql.* .

¿Dónde obtener las clases de java.time?

  • Java SE 8 , Java SE 9 , Java SE 10 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • Versiones posteriores de las implementaciones del paquete de Android de las clases java.time.
    • Para Android anterior (<26), el proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente). Consulte Cómo utilizar ThreeTenABP ….

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter y más .

Hay varias opciones, ya que Android es principalmente Java, pero si desea escribirlo en un textView, el siguiente código sería el truco:

 String currentDateTimeString = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeString); 
 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 

Patrones de formato de fecha

 G Era designator (before christ, after christ) y Year (eg 12 or 2012). Use either yy or yyyy. M Month in year. Number of M's determine length of format (eg MM, MMM or MMMMM) d Day in month. Number of d's determine length of format (eg 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 (eg Monday, Tuesday etc.) D Day in year (1-366) F Day of week in month (eg 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); 

También puedes usar android.os.SystemClock. Por ejemplo, SystemClock.elapsedRealtime () le dará lecturas de tiempo más precisas cuando el teléfono está dormido.

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

Esto te dará, por ejemplo, 12:32.

Recuerde importar android.text.format.Time;

  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); 

Este es un método que será útil para obtener la fecha y la hora:

 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; } 

Puede llamar a este método y obtener los valores de fecha y hora actuales:

 2017/01//09 19:23 

Para un formato personalizado de fecha y hora:

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

La salida es como el siguiente formato: 2015-06-18T10: 15: 56-05: 00

Puede obtener la fecha usando:

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

Esto le dará un resultado en una buena forma, como en este ejemplo: “2014/02/09”.

Si necesita la fecha actual,

 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); 

Si necesita la hora actual,

  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 )); 
 Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
 Time now = new Time(); now.setToNow(); 

Intenta esto también funciona para mí.

simplemente puede usar el siguiente código:

  DateFormat df = new SimpleDateFormat("HH:mm"); //format time String time = df.format(Calendar.getInstance().getTime()); DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date String date=df1.format(Calendar.getInstance().getTime()); 

Prueba esto

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

El método siguiente devolverá la fecha y la hora actuales en Cadena, Use diferentes zonas horarias de acuerdo con su zona horaria real. He usado 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); } 

Bueno, tuve problemas con algunas respuestas de la API, así que fusioné este código, espero que les sirva a los chicos:

  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); 

Salida: 03:25 PM – 2017/10/03

Debe usar la clase de calendario según la nueva API. La clase de fecha está en desuso ahora.

 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); 

Pruebe este código que muestra la fecha y hora actual

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

intente usar el siguiente código:

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