Obtener la hora y la fecha actuales en Android

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

Usted podría usar:

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

Hay un montón de constantes en Calendario para todo lo que necesita. Editar: Documentación de la clase de calendario

Puedes ( pero ya no deberías – ver más abajo!) Usa android.text.format.Time :

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

De la referencia citada 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 desaprobada. Google ahora dice que "[t] su clase tiene una serie de problemas y se recomienda que GregorianCalendar se utiliza 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 sólo preciso a un segundo ; La porción de milisegundos es siempre 000 . Si en un bucle lo hace

 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, tal como 1410543204000 , hasta que 1410543204000 el segundo siguiente, momento en el que 1410543205000 comenzará a repetirse.

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

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

Para aquellos que prefieren un formato personalizado, puede utilizar:

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

Mientras que usted puede tener patrones de DateFormat 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 establecer la zona horaria actual establecida en el dispositivo con Time.getCurrentTimezone() , de lo contrario obtendrá la hora actual en UTC.

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

A continuación, puede obtener todos los campos de fecha que desea, 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 mucha gente está señalando, Google dice que esta clase tiene una serie de problemas y no se supone que se utilizará más:

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

Problemas conocidos:

Por razones históricas al realizar cálculos de tiempo toda la aritmética se lleva a cabo actualmente utilizando números enteros de 32 bits. Esto limita el intervalo de tiempo confiable representable desde 1902 hasta 2037. Vea el artículo de la wikipedia sobre el problema del año 2038 para más detalles. No confíe 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 de DST, producirá una fecha en 1969 (es decir, -1 o 1 segundo antes del 1 de enero de 1970 UTC). Gran parte del formato / análisis supone ASCII texto y por lo tanto no es adecuado para su uso con no-ASCII scripts.

Para la fecha y hora actuales, utilice:

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

Qué productos:

 Feb 27, 2012 5:41:23 PM 

Para ge la hora actual puede utilizar System.currentTimeMillis() que es estándar en Java. A continuación, puede utilizarlo para crear una fecha

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

Y como han mencionado otros para crear un tiempo

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

Pruebe con esta forma Todos los formatos se dan a continuación para obtener 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

Puede utilizar 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 puedes obtener 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); 

Igual va para la fecha, como sigue:

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

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

 String currentDateTimeString = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeString); 

Tl dr

 Instant.now() // Current moment in UTC. ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone 

Detalles

Las otras respuestas, aunque correctas, están obsoletas. Las viejas clases de fecha y hora han demostrado ser mal diseñadas, confusas y problemáticas.

Java.time

Estas viejas clases han sido suplantadas por el marco java.time .

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

Estas nuevas clases se inspiran 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 ZonedDateTime . Si omite la zona horaria, su zona horaria predeterminada actual de JVM se aplica implícitamente. Es mejor especificar explícitamente la zona horaria deseada / esperada.

Utilice los nombres adecuados de zona horaria en el formato de 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 son ni estandarizadas ni únicas.

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

Generación de cadenas

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

ISO 8601

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

 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 agregando el nombre de la zona horaria entre corchetes. Información muy útil e importante, pero no estándar.

2016-03-22T20: 09: 01.613-08: 00 [América / Los_Angeles]

Formato personalizado

O especifique su propio patrón de formato 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 usará para traducir el nombre de día / mes y también para definir normas culturales como el orden del año y 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 localización automática.

 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 framework java.time está integrado en Java 8 y posterior. Estas clases suplantan las viejas clases de fecha-hora heredadas , como java.util.Date , .Calendar , & java.text.SimpleDateFormat .

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

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

Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 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 SE 7
    • Gran parte de la funcionalidad de java.time se retroporta a Java 6 & 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta específicamente a ThreeTen-Backport (mencionado anteriormente) para Android.
    • Consulte Cómo utilizar ….

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

 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 

Formato de fecha Patrones

 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 puede utilizar 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 le 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); 

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 forma agradable, como en este ejemplo: "2014/02/09".

Para un formato de hora y fecha personalizado:

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

La salida es como abajo del formato: 2015-06-18T10: 15: 56-05: 00

 Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
 Time now = new Time(); now.setToNow(); 

Prueba esto funciona para mí también.

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 

Simplemente puede utilizar el código siguiente:

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

Debe utilizar la clase de calendario de acuerdo con la nueva API. La clase de fecha está obsoleta 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); 

Prueba esto

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

Pruebe este código para mostrar la fecha y la hora actuales

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

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

Intenta 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); 
 String DataString=DateFormat.getDateInstance(DateFormat.SHORT).format(Calendar.getInstance().getTime()); 

Para obtener la cadena de formato de fecha corta en el formato localizado de la unidad.

No puedo entender por qué tantas respuestas son hardcoded formatos de fecha y hora cuando el OS / Java suministra la localización correcta de las fechas y la hora? ¿No es mejor utilizar siempre los formatos de la unidad que del programador?

También proporciona la lectura de fechas en formatos localizados:

  DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT); Date date=null; try { date = format.parse(DateString); } catch(ParseException e) { } 

Entonces es el usuario que establece el formato para mostrar las fechas y la hora y no usted? Independientemente de idiomas, etc hay diferentes formatos en diferentes países con el mismo idioma.

Hay una clase de utilidades ISO8601Utils en el paquete com.google.gson.internal.bind.util, por lo que si usas GSON en tu aplicación, puedes usarlo.

Soporta millis y zonas horarias por lo que es una opción bastante buena de la caja.

  • ¿Cómo puedo obtener la diferencia entre dos fechas en android ?, intentado todo y publicar
  • ¿Por qué "Date d = new Date ();" devuelve un error?
  • Consulta Sqlite para la clasificación de fechas
  • Cómo agregar fecha en la base de datos sqlite
  • Convertir cadena en formato de fecha
  • ¿Cómo puedo calcular la edad en Java con precisión? Fecha de nacimiento
  • Android analizando la cadena hasta la fecha con SimpleDateFormat
  • Fecha y hora de la fecha
  • Android: cómo construir desde la fecha desde la fecha del servidor
  • Cómo obtener el objeto Date en formato "AAAA-MM-DD" en android
  • ¿Cómo transformar currentTimeMillis a un formato de fecha legible?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.