¿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.

Chatar Veer Suthar
fuente
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);
Paresh Mayani
fuente
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());
Pratik Butani
fuente
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); 
}
Graham Smith
fuente
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());
 }
Kamal
fuente
11

prueba esto,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);
Lucifer
fuente
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
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

Primero necesitas una instancia

Marthyn Olthof
fuente
getDateInstance, sin reconocer esto
Chatar Veer Suthar
si nos fijamos en los documentos de Java, debería ser, docs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof
@Veer, si accidentalmente importó android.text.format.DateFormat en lugar de java.text.DateFormat, getDateInstance () no será reconocido
gcbound
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);
SoVinceble
fuente
5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// importar clase de fecha como java.util

arshad shaikh
fuente
4

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

Calendar cal = Calendar.getInstance();
cal.getTime().toString();
Rajeswari Kotikalapudi
fuente
4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());
Zeeshan Ali
fuente
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

Ole VV
fuente
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();
indrajeet jyoti
fuente
¿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();        
Vinayak
fuente
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);
cNgamba
fuente
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);
rhaldar
fuente
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()));
Android Dev
fuente
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 ...

Fátima
fuente
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());
Ivo Stoyanov
fuente
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);
    }
Divyesh Patel
fuente
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

Amitsharma
fuente
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.

Muskovets
fuente
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);
Savita Sharma
fuente
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.

Farshid Ahmadi
fuente
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 ... :)

vijay saini
fuente
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);
dondondon
fuente