2010-08-26 13 views
17

Ho un Map contenente la data di nascita di una persona come GregorianCalendar.Come posso ottenere una data dal mio calendario?

Ad esempio:

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

Ho bisogno di un Date, ma nel mio database E 'solo in formato Calendar. Il tipo di dati della colonna nel database è DateTime. Come posso ottenere la data di nascita in un formato Date?

+1

formattare il codice per migliorare la leggibilità, è possibile inserire il codice tra i tag codice o utilizzando 'caratteri intorno a loro disposizione –

+0

per renderlo leggibile e si prega di inviare il codice. –

risposta

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

Ecco un esempio è possibile utilizzare per provarlo, e vedere che fa quello che ti serve.

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

uscita:

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 data è: 26.08.2010

+0

Penso che il cast non sia necessario, come 'GregorianCalendar estende Calendar' –

+1

@FarmBoy, sì, ma la mappa definita restituisce' Oggetto', quindi il cast è necessario. – OscarRyz

+0

Grazie mille. L'ho preso Ho ottenuto il formato specificato (Gio 26 agosto 07:07:27 CDT 2010). ma ho bisogno del 26.08.2010. è possibile ottenere la funzione predefinita. come posso ottenere così – Twity

5

Da java.sql.Date-java.util.Calendar (o 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); 

Da java.util.Calendar-java.sql.Date

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

** NOTA **

java.sql.Timestamp è un fratello di java.sql.Date ed entrambi si estende java.util.Date, quindi è possibile utilizzare sia esattamente allo stesso modo.

Inoltre, per convertire una stringa data in un oggetto data, utilizzare 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); 

E per invertire tale tendenza

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

Copiare ed eseguire l'esempio.

Basta cambiare modalità per testare diverse condizioni di commutazione.

Per l'incapsulamento sono stati resi disponibili solo alcuni metodi. La formattazione della data non è compito tuo perché il metodo restituisce la data e spetta al chiamante utilizzare il formato che desidera.

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