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