yyyy variable una obtener ingresar formato fecha declarar atributo actual java date

variable - obtener fecha actual java dd/mm/yyyy



¿Cómo consigo una fecha sin tiempo en Java? (22)

¿Hay alguna otra manera que estos dos?

Sí hay.

LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )

java.time

Java 8 y versiones posteriores vienen con el nuevo paquete java.time incorporado. Ver Tutorial . Gran parte de la funcionalidad de java.time está respaldada a Java 6 y 7 en ThreeTen-Backport y además se adapta a Android en ThreeTenABP .

Similar a Joda-Time , java.time ofrece una clase LocalDate para representar un valor de solo fecha sin hora del día y sin zona horaria.

Tenga en cuenta que la zona horaria es fundamental para determinar una fecha en particular. A las doce de la noche, en París, por ejemplo, la fecha sigue siendo "ayer" en Montreal.

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

De forma predeterminada, java.time utiliza el estándar ISO 8601 para generar una representación de cadena de una fecha o valor de fecha y hora. (Otra similitud con Joda-Time.) Entonces, simplemente llame a toString() para generar texto como 2015-05-21 .

String output = today.toString() ;

Acerca de java.time

El marco java.time está integrado en Java 8 y java.time posteriores. Estas clases sustituyen a las antiguas y problemáticas clases 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 busca Stack Overflow para muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases java.time?

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

El proyecto ThreeTen-Extra extiende 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 more .

Continuando desde el programa Java de Stack Overflow para obtener la fecha actual sin marca de tiempo :

¿Cuál es la forma más eficiente de obtener un objeto Date sin el tiempo? ¿Hay alguna otra manera que estos dos?

// Method 1 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dateWithoutTime = sdf.parse(sdf.format(new Date())); // Method 2 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); dateWithoutTime = cal.getTime();

Actualización :

  1. Sabía de Joda-Time ; Solo intento evitar una biblioteca adicional para una tarea tan simple (creo). Pero en base a las respuestas hasta ahora, Joda-Time parece extremadamente popular, así que podría considerarlo.

  2. Por eficiente , quiero decir, quiero evitar String creación de String objetos temporales como se usa en el method 1 , mientras que el method 2 parece un truco en lugar de una solución.


¿Absolutamente tienes que usar java.util.Date ? Le recomendaría que utilice Joda Time o el paquete java.time de Java 8 en su lugar. En particular, mientras que Fecha y Calendario siempre representan un instante particular en el tiempo, sin un concepto como "solo una fecha", Joda Time tiene un tipo que lo representa ( LocalDate ). Su código será mucho más claro si puede usar tipos que representan lo que realmente está tratando de hacer.

Hay muchas, muchas otras razones para usar Joda Time o java.time lugar de los tipos java.util incorporados; en general, son API mucho mejores. Siempre puede convertir a / desde un java.util.Date en los límites de su propio código si lo necesita, por ejemplo, para la interacción de la base de datos.


Acabo de hacer esto para mi aplicación:

public static Date getDatePart(Date dateTime) { TimeZone tz = TimeZone.getDefault(); long rawOffset=tz.getRawOffset(); long dst=(tz.inDaylightTime(dateTime)?tz.getDSTSavings():0); long dt=dateTime.getTime()+rawOffset+dst; // add offseet and dst to dateTime long modDt=dt % (60*60*24*1000) ; return new Date( dt - modDt // substract the rest of the division by a day in milliseconds - rawOffset // substract the time offset (Paris = GMT +1h for example) - dst // If dayLight, substract hours (Paris = +1h in dayLight) ); }

API de Android de nivel 1, sin biblioteca externa. Respeta la luz del día y la zona horaria predeterminada. No hay manipulación de cadenas, así que creo que esta es una CPU más eficiente que la tuya, pero no he realizado ninguna prueba.


Aquí hay una solución limpia sin conversión a cadena y viceversa, y tampoco vuelve a calcular el tiempo varias veces a medida que restablece a cero cada componente del tiempo. También usa % (módulo) en lugar de dividir seguido de multiplicar para evitar la doble operación.

No requiere dependencias de terceros, y RESPONDE A LA TIMEZONE OF THE Calender. Pasó el objeto. Esta función devuelve el momento en el tiempo a las 12 AM en la zona horaria de la fecha (Calendario) que pasa.

public static Calendar date_only(Calendar datetime) { final long LENGTH_OF_DAY = 24*60*60*1000; long millis = datetime.getTimeInMillis(); long offset = datetime.getTimeZone().getOffset(millis); millis = millis - ((millis + offset) % LENGTH_OF_DAY); datetime.setTimeInMillis(millis); return datetime; }


Bueno, que yo sepa, no hay una manera más fácil de lograrlo si solo usa el JDK estándar.

Por supuesto, puede poner esa lógica en method2 en una función estática en una clase auxiliar, como se hace aquí en toBeginningOfTheDay-method

Luego puedes acortar el segundo método para:

Calendar cal = Calendar.getInstance(); Calendars.toBeginningOfTheDay(cal); dateWithoutTime = cal.getTime();

O, si realmente necesita el día actual en este formato con tanta frecuencia, entonces puede envolverlo en otro método de ayuda estática, convirtiéndolo así en una sola línea.


Definitivamente no es la forma más correcta, pero si solo necesita una solución rápida para obtener la fecha sin la hora y no desea utilizar una biblioteca de terceros, debería hacerlo.

Date db = db.substring(0, 10) + db.substring(23,28);

Solo necesitaba la fecha para propósitos visuales y no podía Joda, así que me quedé en la subcadena.


Echa un vistazo a Veyder-tiempo . Es una alternativa simple y eficiente para java.util y Joda-time. Tiene una API intuitiva y clases que representan fechas solo, sin marcas de tiempo.


Esta es una forma simple de hacerlo:

Calendar cal = Calendar.getInstance(); SimpleDateFormat dateOnly = new SimpleDateFormat("MM/dd/yyyy"); System.out.println(dateOnly.format(cal.getTime()));


Esto es lo que solía obtener para la fecha de hoy con la hora establecida en 00:00:00 :

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Date today = new Date(); Date todayWithZeroTime = formatter.parse(formatter.format(today));


La forma más directa que hace un uso completo de la enorme base de datos TimeZone de Java y es correcta:

long currentTime = new Date().getTime(); long dateOnly = currentTime + TimeZone.getDefault().getOffset(currentTime);


La forma más sencilla:

long millisInDay = 60 * 60 * 24 * 1000; long currentTime = new Date().getTime(); long dateOnly = (currentTime / millisInDay) * millisInDay; Date clearDate = new Date(dateOnly);


La respuesta estándar a estas preguntas es usar Joda Time . La API es mejor y si está utilizando los formateadores y analizadores, puede evitar la falta no intuitiva de seguridad de SimpleDateFormat de SimpleDateFormat .

Usar Joda significa que simplemente puedes hacer:

LocalDate d = new LocalDate();

Update :: Usando Java 8, esto se puede lograr usando

LocalDate date = LocalDate.now();


No tiene sentido hablar de una fecha sin una marca de tiempo con respecto a las rutinas de Fecha en el tiempo de ejecución estándar de Java, ya que esencialmente se asigna a un milisegundo específico y no a una fecha. Dicho milisegundo tiene intrínsecamente una hora del día que lo hace vulnerable a los problemas de la zona horaria, como el horario de verano y otros ajustes del calendario. Ver ¿Por qué restar estas dos veces (en 1927) da un resultado extraño? para un ejemplo interesante.

Si desea trabajar con fechas en lugar de milisegundos, necesita usar otra cosa. Para Java 8 hay un nuevo conjunto de métodos que proporcionan exactamente lo que usted solicita. Para Java 7 y versiones anteriores, use Joda-Time


Prefiero no utilizar bibliotecas de terceros tanto como sea posible. Sé que esta manera se menciona antes, pero aquí hay una forma limpia y agradable:

/* Return values: -1: Date1 < Date2 0: Date1 == Date2 1: Date1 > Date2 -2: Error */ public int compareDates(Date date1, Date date2) { SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); try { date1 = sdf.parse(sdf.format(date1)); date2 = sdf.parse(sdf.format(date2)); } catch (ParseException e) { e.printStackTrace(); return -2; } Calendar cal1 = new GregorianCalendar(); Calendar cal2 = new GregorianCalendar(); cal1.setTime(date1); cal2.setTime(date2); if(cal1.equals(cal2)) { return 0; } else if(cal1.after(cal2)) { return 1; } else if(cal1.before(cal2)) { return -1; } return -2; }

Bueno, ¡no usar GregorianCalendar es tal vez una opción!



Puedes usar el tiempo joda.

private Date dateWitoutTime(Date date){ return new LocalDate(date).toDate() }

y llamas con:

Date date = new Date(); System.out.println("With Time = " + dateWitoutTime(date) + "/n Without time = " + date);


Que hay de esto

public static Date formatStrictDate(int year, int month, int dayOfMonth) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month, dayOfMonth, 0, 0, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); }


Si necesita la parte de la fecha sólo para fines de eco, entonces

Date d = new Date(); String dateWithoutTime = d.toString().substring(0, 10);


Si solo necesita la fecha actual, sin tiempo, otra opción es:

DateTime.now().withTimeAtStartOfDay()


Si todo lo que desea es ver la fecha como "YYYY-MM-DD" sin el resto del desorden, por ejemplo, "Jue 21 de mayo, 12:08:18 EDT 2015", simplemente use java.sql.Date . Este ejemplo obtiene la fecha actual:

new java.sql.Date(System.currentTimeMillis());

También java.sql.Date es una subclase de java.util.Date .


Use LocalDate.now() y LocalDate.now() en una Date como la siguiente:

Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());


// 09/28/2015 System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime())); // Mon Sep 28 System.out.println( new Date().toString().substring(0, 10) ); // 2015-09-28 System.out.println(new java.sql.Date(System.currentTimeMillis())); // 2015-09-28 // java 8 System.out.println( LocalDate.now(ZoneId.of("Europe/Paris")) ); // rest zones id in ZoneId class