Twity
Twity

Reputation: 367

How can I get a Date from my Calendar?

I have a Map containing the birthdate of a person as a GregorianCalendar.

For example:

{
    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
}

I need a Date, but in my database it is in Calendar format only. The datatype of column in the database is DateTime. How can I get the birthdate in a Date format?

Upvotes: 26

Views: 98880

Answers (3)

OscarRyz
OscarRyz

Reputation: 199333

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

Here's a sample you can use to test it, and see it does what you need.

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

Output:

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=[]
    }

The date is: 26.08.2010

Upvotes: 42

Jaffar Ramay
Jaffar Ramay

Reputation: 1165

Copy and run the example.

Just change mode to test different switch conditions.

For encapsulation just made couple of methods private. Date formatting isn't your job to do because method is now returning date and it is up to the caller to use what ever format he wants.

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

Upvotes: 1

Yanick Rochon
Yanick Rochon

Reputation: 53616

From java.sql.Date to java.util.Calendar (or 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);

From java.util.Calendar to java.sql.Date

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

** NOTE **

java.sql.Timestamp is a sibling of java.sql.Date and both extends java.util.Date, therefore you can use either exactly the same way.

Also, to convert a date string into a date object, use 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);

And to reverse it

String dateStr1 = sdf.format(cal.getTime());
// or
String dateStr2 = sdf.format(date);  // java.sql.Date / java.util.Date

Upvotes: 6

Related Questions