web-dev-qa-db-fra.com

Comment convertir un objet Java.sql.Date en un GregorianCalendar?

Je pensais pouvoir créer un GregorianCalendar en utilisant le constructeur qui prend l'année, le mois et le jour, mais je ne peux pas obtenir ces champs de manière fiable à partir d'une instance de la Java.sql.Date classe. Les méthodes qui obtiennent ces valeurs de Java.sql.Date Sont obsolètes, et le code suivant montre pourquoi elles ne peuvent pas être utilisées:

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

Voici la sortie, montrant que le mois et l'année ne sont pas renvoyés correctement à partir des méthodes getYear() et getMonth() obsolètes de Date:

Année: 111
Mois: 11
Jour: 25
2011-12-25
Jeu 25 déc 00:00:00 EST 111

Étant donné que je ne peux pas utiliser le constructeur que j'ai essayé ci-dessus et qu'il n'y a pas de constructeur GregorianCalendar qui prend simplement un Date, comment puis-je convertir un objet Java.sql.Date En un GregorianCalendar?

20
Bill the Lizard

Vous devez le faire en deux étapes. Créez d'abord un GregorianCalendar à l'aide du constructeur par défaut, puis définissez la date à l'aide de la méthode (nommée avec confusion) 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());
    }
}

Voici la sortie:

2011-12-25
Dim 25 déc 00:00:00 EST 2011

33
Bill the Lizard

Je vais de mémoire, mais as-tu essayé

Calendar cal = GregorianCalendar.getInstance();
cal.setTime(rs.getDate());
4
DaveH

Essaye ça.

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());
    }
}
4
Ravindra Gullapalli

Utilisez setTimeInMillis () :

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

Je pense que c'est la manière la plus simple.

2
ceklock