web-dev-qa-db-fra.com

Comment puis-je obtenir une date de mon calendrier?

J'ai un Map contenant la date de naissance d'une personne en tant que GregorianCalendar.

Par exemple:

{
    motherEmailID=null,
    coreType=Ticket,
    _NULL=null,
    additionalFaclitiesProvided=[],
    dateOfBirth=Java.util.GregorianCalendar[
        time=585340200000,
        areFieldsSet=false,
        areAllFieldsSet=false,
        lenient=true,
        zone=Sun.util.calendar.ZoneInfo[id="GMT",
    offset=0,
    dstSavings=0,
    useDaylight=false,
    transitions=0,
    lastRule=null],
        firstDayOfWeek=1,
        minimalDaysInFirstWeek=1,
        ERA=1,
        YEAR=1988,
        MONTH=6,
        WEEK_OF_YEAR=30,
        WEEK_OF_MONTH=4,
        DAY_OF_MONTH=20,
        DAY_OF_YEAR=202,
        DAY_OF_WEEK=4,
        DAY_OF_WEEK_IN_MONTH=3,
        AM_PM=0,
        HOUR=0,
        HOUR_OF_DAY=0,
        MINUTE=0,
        SECOND=0,
        MILLISECOND=0,
        ZONE_OFFSET=19800000,
        DST_OFFSET=0],
    targetEnd=null,
    year_semester=null
}

J'ai besoin d'un Date, mais dans ma base de données, il est au format Calendar uniquement. Le type de données de la colonne dans la base de données est DateTime. Comment obtenir la date de naissance au format Date?

24
Twity
Calendar calendar  = ( Calendar )  thatMap.get("dateOfBirth");
Date date = calendar.getTime();

Voici un exemple que vous pouvez utiliser pour le tester et voir qu'il fait ce dont vous avez besoin.

import Java.util.*;
import Java.text.*;

public class GetDate {
     public static void main( String [] args ) {
        Map map = new HashMap();
        map.put("dateOfBirth", Calendar.getInstance() );
        map.put("additionalFaclitiesProvided", new ArrayList() );
        /// etc. 
        System.out.println( map );

        Calendar cal = ( Calendar ) map.get("dateOfBirth");
        Date date = cal.getTime();
        // Addressing your comment:
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
        System.out.println( "The date is: "+  sdf.format( date )  );
    }
}

Production:

Java GetDate 
    {dateOfBirth=Java.util.GregorianCalendar[
        time=1282824447050,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=Sun.util.calendar.ZoneInfo[
            id="America/Mexico_City",offset=-21600000,dstSavings=3600000,useDaylight=true,transitions=99,lastRule=Java.util.SimpleTimeZone[
                id=America/Mexico_City,offset=-21600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=3,startDay=1,
                startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=7200000,endTimeMode=0
            ]
        ],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=4,DAY_OF_MONTH=26,DAY_OF_YEAR=238,DAY_OF_WEEK=5,
            DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=7,HOUR_OF_DAY=7,MINUTE=7,SECOND=27,MILLISECOND=50,ZONE_OFFSET=-21600000,DST_OFFSET=3600000]**, additionalFaclitiesProvided=[]
    }

La date est: 26.08.2010

36
OscarRyz

De Java.sql.Date à Java.util.Calendar (ou Java.util.GregorianCalendar)

Calendar cal = new GregorianCalendar();
cal.setTime(date);   // Java.sql.Date date;

// then set the GregorianCalendar in your map
map.put('dateOfBirth', cal);

De Java.util.Calendar à Java.sql.Date

Java.sql.Date date = new Java.sql.Date(map.get('dateOfBirth').getTimeInMillis());

** [~ # ~] note [~ # ~] **

Java.sql.Timestamp est un frère de Java.sql.Date et les deux s'étendent Java.util.Date, vous pouvez donc utiliser soit exactement la même manière.

De plus, pour convertir une chaîne de date en un objet date, utilisez SimpleDateFormat :

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
Date d = sdf.parse("2010-08-26 8:34:00");
Calendar cal = Calendar.getInstance();
cal.setTime(d);

Et pour l'inverser

String dateStr1 = sdf.format(cal.getTime());
// or
String dateStr2 = sdf.format(date);  // Java.sql.Date / Java.util.Date
5
Yanick Rochon

Copiez et exécutez l'exemple.

Changez simplement de mode pour tester différentes conditions de commutation.

Pour l'encapsulation, deux méthodes sont devenues privées. Le formatage de la date n'est pas votre travail, car la méthode renvoie maintenant la date et il appartient à l'appelant d'utiliser le format qu'il souhaite.

import Java.util.Date;
import Java.util.GregorianCalendar;

public class RandomDateOfBirthGenerator {

    private static GregorianCalendar gc = new GregorianCalendar();

    public static enum Mode {
        SENIOR, ADULT, YOUTH, CHILD
    }

    public static Date generateRandomDateOfBirth(Mode mode) {

        int year = 0;

        switch(mode){
        case SENIOR:
            year = randBetween(1900, 1940);
            break;

        case ADULT:
            year = randBetween(1941, 1995);
            break;

        case YOUTH:
            year = randBetween(1995, 2002);
            break;

        case CHILD:
            year = randBetween(2002, 2014);
            break;
        }

        gc.set(gc.YEAR, year);

        int dayOfYear = randBetween(1, gc.getActualMaximum(gc.DAY_OF_YEAR));

        gc.set(gc.DAY_OF_YEAR, dayOfYear);

        return gc.getTime();
    }

    private static int randBetween(int start, int end) {
        return start + (int) Math.round(Math.random() * (end - start));
    }

    public static void main(String[] args) {
        System.out.println(generateRandomDateOfBirth(Mode.CHILD));
    }
}
1
Jaffar Ramay