Los constructores parametrizados de la clase java.util.Date están en desuso. ¿Cuál es la alternativa?

StackOverflow https://stackoverflow.com/questions/1874298

  •  18-09-2019
  •  | 
  •  

Pregunta

¿Qué puedo usar para reemplazar esto, new Date(2009, 12, 9)?

Gracias por su ayuda.

¿Fue útil?

Solución

Lo ideal es usar Tiempo Joda lugar. Es una API infinitamente superior a la incorporada. A continuación, desearía que elegir entre LocalDateTime y DateTime en función de sus necesidades exactas (es un área complicada - no voy a tratar de resumir en una frase o dos, pero el docs hacen un buen trabajo).

Si es absolutamente necesario, utilizar un java.util .calendar y convertir eso a un Date cuando es necesario.

Otros consejos

Calendario!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Tenga en cuenta que no puse 12 de diciembre porque en realidad es 11 (enero es 0).

A continuación, puede agregar o quitar segundos, minutos, horas, días, meses o años con facilidad:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

Y, por último, si quieres una Fecha:

cal.getTime();

Si nos fijamos en la Javadoc lo que apunta hacia el uso de Calendario .

  

A partir de la versión 1.1 del JDK, sustituido por Calendar.set (+ año 1900, meses,   fecha, horas, minutos) o GregorianCalendar (+ año 1900, mes, fecha, horas,   min).

Si nos fijamos en el constructor Date params verá por qué se está desfasada:

  

Parámetros:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year no es lo que espera y tampoco lo está month.

Para representar la fecha que usted ha mencionado es necesario llamar a Date como esto (no recomendado)

new Date(2009-1900, 12-1, 9)

La alternativa usando Calendar es

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();

También puede utilizar el SimpleDateFormat objeto:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}

Tim, en sus comentarios que mencionar que usted está haciendo esto en un contexto GXT - es decir, en el código de cliente GWT. GWT no soporta GregorianCalendar y lo más probable es que no será capaz de poner JodaTime a través de la GWTCompiler (que puede ser capaz de, pero es lo que realmente quieren).

Creo que lo que queda es realmente con la opción de utilizar JNSI si desea realizar operaciones de calendario en GWT. Consulte la clase Fecha en JavaScript.

Desafortunadamente apoyo fecha en Java es completamente horrible. Oficialmente, lo que probablemente tiene que hacer esto con el calendario, pero eso no debería ser necesario en mi opinión. Como otros han mencionado, el tiempo Joda es mucho mejor, pero todavía no es tan fácil de usar como fechas en Ruby on Rails.

No estoy al tanto de cualquier paquete de Java que proporciona bastante esa cantidad de apoyo fecha (Joda queda un poco corto, pero se acerca), pero en Groovy, utilizando TimeCategory le da muy Ruby on Rails apoyo fecha similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top