2012-02-02 21 views
19

Pensé que sería capaz de crear un GregorianCalendar usando el constructor que toma el año, el mes y el día, pero no puedo obtener esos campos de una instancia de la clase java.sql.Date. Los métodos que obtienen los valores de java.sql.Date están en desuso, y el siguiente código muestra por qué no pueden ser utilizados:¿Cómo convierto un objeto java.sql.Date en un GregorianCalendar?

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println("Year: " + date.getYear()); 
     System.out.println("Month: " + date.getMonth()); 
     System.out.println("Day: " + date.getDate()); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(date.getYear(), date.getMonth(), date.getDate()); 
     System.out.println(cal.getTime()); 
    } 
} 

Aquí está la salida, lo que demuestra que el mes y el año no se devuelven correctamente desde el obsoleto getYear() y getMonth() métodos de Date:

Año: 111
Mes: 11
Día: 25
2011-12-25
Jue Dic 25 de 00:00:00 EST 111

Ya que no puedo utilizar el constructor que he intentado antes, y no hay GregorianCalendar constructor que sólo se necesita un Date, ¿cómo puedo convertir un objeto en un java.sql.DateGregorianCalendar?

Respuesta

32

Tienes que hacer esto en dos pasos. Primero crea un GregorianCalendar usando el constructor predeterminado, luego configura la fecha usando el método (confusamente llamado) setTime.

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 

Aquí está la salida:

2011-12-25
Dom Dic 25 de 00:00:00 EST 2011

3

voy de la memoria, pero usted tiene intentado

Calendar cal = GregorianCalendar.getInstance(); 
cal.setTime(rs.getDate()); 
+1

De donde vino rs.getDate()? –

+1

sorry - rs es el nombre de variable que siempre le doy a los objetos ResultSet; solo está allí para representar una instancia de java.sql.Date que ya ha creado una instancia. – DaveH

+0

No es realmente la respuesta más específica, pero +1 para seguir algunos estándares que hacen que este sea el código exacto que estaba buscando. – KjetilNordin

4

Pruebe esto.

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 
1

Uso setTimeInMillis():

java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); 
Calendar cal = new GregorianCalendar(); 
cal.setTimeInMillis(date.getTime()); 

creo que esta es la forma más sencilla.

Cuestiones relacionadas