¿Cómo puedo obtener la fecha actual en Android?


165

Escribí el siguiente código

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

Pero me pregunta parámetro, quiero la fecha actual en formato de cadena,

me gusta

28-Dec-2011

para que pueda establecer TextView,

explique un poco, si cree que algo es necesario, soy nuevo en el desarrollo de Android.


1
Si bien el uso de la DateFormatclase estaba bien cuando se hizo esta pregunta en 2011, esa clase y su subclase SimpleDateFormatsiempre fueron problemáticas y ahora están desactualizadas. Le recomiendo que no los use y, en cambio, busque en java.time, la API moderna de fecha y hora de Java .
Ole VV

Respuestas:


389

Puede usar la SimpleDateFormatclase para formatear la fecha en el formato deseado.

Simplemente revise este enlace donde tenga una idea para su ejemplo.

Por ejemplo:

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

Actualizar:

El ejemplo detallado está aquí , le sugiero que siga este ejemplo y comprenda el concepto de la clase SimpleDateFormat.

Solución final:

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

es posible que desee utilizar el método System.currentTimeMillis () o la clase Data en lugar de la clase Calendar. Debería ser más rápido. stackoverflow.com/questions/368094/…
cjayem13

¡Esto requiere API 24!
ueen

Para su información, las clases de fecha y hora terriblemente problemáticas como java.util.Date, java.util.Calendary java.text.SimpleDateFormatahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
Basil Bourque

@ueen Importar desde el paquete de Java no desde Android.
Sadda Hussain

Obras multas? ¿Actualmente? (2020)
luke cross

152

Su código simple de una línea para obtener la Fecha actual en este formato aaaa-MM-dd puede usar el formato que desee:

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

77
Debe cambiarlo a: String currentDate = new SimpleDateFormat ("dd-MM-aaaa", Locale.getDefault ()). Format (new Date ());
Bart Burg

1
¡Wow gracias! Esto funcionó, aunque creo que podría haber descubierto por qué la fecha en mi dispositivo virtual se mostraba un día antes, probablemente porque la fecha en la máquina virtual no era la correcta. Cuando se probó en un teléfono real, funcionó de maravilla. Así que gracias @Pratik
wesley franks

30

Esto no tiene nada que ver con Android, ya que está basado en Java, por lo que podría usar

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

Hay errores, la nueva Date () está pidiendo argumentos, y usted está inicializando el DateFormat con SimpleDateFormat, que tampoco es válido
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

prueba esto,

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

está diciendo agregar argumentos a la nueva fecha (largo)
Chatar Veer Suthar

en new Date (), no puede pedir un parámetro largo.
Lucifer

¿Por qué usas trabajo de llaves privado, ejecutas tu código en un proyecto de Android, obtienes el resultado?
Chatar Veer Suthar

por favor elimine ese "privado". Sí, obtengo el resultado, estoy viendo tu discusión. No sé por qué tienes problemas para una consulta muy simple.
Lucifer


7

Funciona como un encanto y se convierte en String como un bono;)

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

// importar clase de fecha como java.util


4

El siguiente código muestra la hora y la fecha.

Calendar cal = Calendar.getInstance();
cal.getTime().toString();

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

4

Estoy proporcionando la respuesta moderna.

java.time y ThreeTenABP

Para obtener la fecha actual:

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

Esto le da un LocalDateobjeto, que es lo que debe usar para mantener una fecha en su programa. UNALocalDate es una fecha sin hora del día.

Solo cuando necesite mostrar la fecha a un usuario, formatee en una cadena adecuada para la configuración regional del usuario:

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

Cuando ejecuté este fragmento hoy en la configuración regional de inglés de EE. UU., La salida fue:

13 de julio de 2019

Si lo desea más corto, especifique FormatStyle.MEDIUMo incluso FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateusa la configuración regional de formato predeterminada, por lo que el punto es que dará una salida adecuada para esa configuración regional, diferente para diferentes configuraciones regionales.

Si su usuario tiene requisitos muy especiales para el formato de salida, use una cadena de patrón de formato:

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

13 de abril de 2019

Estoy usando y recomendando java.time, la API de fecha y hora moderna de Java. DateFormat, SimpleDateFormat, DateY Calendarse utiliza en la pregunta y / o muchas de las otras respuestas, están mal diseñados y largo anticuado. Y java.time es mucho más agradable para trabajar.

Pregunta: ¿Puedo usar java.time en Android?

Sí, java.time funciona bien en dispositivos Android más antiguos y nuevos. Solo requiere al menos Java 6 .

  • En Java 8 y versiones posteriores y en dispositivos Android más nuevos (desde el nivel 26 de API), la API moderna viene incorporada.
  • En Java 6 y 7, obtenga el Backport ThreeTen, el backport de las clases modernas (ThreeTen para JSR 310; vea los enlaces en la parte inferior).
  • En Android (anterior) use la edición de Android de ThreeTen Backport. Se llama ThreeTenABP. Y asegúrese de importar las clases de fecha y hora org.threeten.bpcon subpaquetes.

Enlaces


Muy buena respuesta! Pero, ¿cómo puedo convertir ThreeTen LocalDateTime a la fecha? Estoy usando Firebase, y un requisito previo para guardar la marca de tiempo es el objeto Date.
H.Karatsanov

@ H.Karatsanov Si se utiliza el backport: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Si se utiliza el java.time incorporada: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Consulte Conversión entre java.time.LocalDateTime y java.util.Date . La respuesta autorizada de JodaStephen está allí, y también una respuesta que muestra el 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();

¿Contribuye algo sustancial a la pregunta ( quiero la fecha actual en formato de cadena, como28-Dec-2011 ) que no está en las otras respuestas? En cualquier caso, todavía está usando la SimpleDateFormatclase notoriamente problemática y desactualizada . Por favor, no necesitamos más respuestas para hacer eso.
Ole VV

funciona para las mejores prácticas, agregue el segundo parámetro locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("aaaa / 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

Un simple ajuste a la solución de 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

Puede usar el siguiente código para obtener una fecha en el formato que desee.

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

Nice one liner y funciona en Sdks inferiores. Unos pocos caracteres más cortos DateFormat.format ("dd-MM-aaaa", nuevo 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);

Esta es la mejor respuesta ...


0

La forma más sencilla de obtener la fecha actual en la configuración regional actual (configuración regional del dispositivo):

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

Si quieres tener la fecha en diferentes estilos usa getDateInstance(int style) :

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

Otros estilos: DateFormat.LONG,DateFormat.DATE_FIELD , DateFormat.DAY_OF_YEAR_FIELD, etc (uso CTRL+Spacepara ver todos ellos)

Si también necesitas el tiempo:

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

intente con este enlace de código, esta es la respuesta correcta absoluta para todos los casos en toda la fecha y hora. o personalizar la fecha y la hora según la necesidad y el requisito de la aplicación.

intente con este enlace. prueba con este enlace


0

Escribí la aplicación de calendario usando CalendarView y es mi código:

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

El campo 'calendario' es mi CalendarView. Importaciones:

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

Tengo fecha actual sin errores.


0

Este es el código que usé:

             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

Ya he usado esto:

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

al principio tengo tiempo, luego declare un Formato de fecha simple (para obtener una fecha como: 19-6-2018) luego uso el formato para cambiar la fecha a cadena.


0

solo un código de línea para obtener un formato de fecha simple:

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

salida: 18-mayo-2020

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

salida: 18-mayo-2020 11:00:39 AM

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

salida: 11:00:39 AM

Espero que esta respuesta sea suficiente para obtener este formato de fecha y hora ... :)


Por favor, no les enseñe a los jóvenes a usar las clases SimpleDateFormaty DateFormatclases desactualizadas y notoriamente problemáticas . Al menos no como la primera opción. Y no sin ninguna reserva. Hoy tenemos mucho mejor en java.timela moderna API de fecha y hora de Java, y su DateTimeFormatter. Sí, puedes usarlo en Android. Para Android antiguo, vea Cómo usar ThreeTenABP en Android Project .
Ole VV

-1

Este es el código que usé :

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.