2010-08-26 8 views
17

Tengo un Map que contiene la fecha de nacimiento de una persona como GregorianCalendar.¿Cómo puedo obtener una fecha de mi calendario?

Por ejemplo:

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

Necesito un Date, pero en mi base de datos está en formato Calendar solamente. El tipo de datos de la columna en la base de datos es DateTime. ¿Cómo puedo obtener la fecha de nacimiento en un formato Date?

+1

formatee su código para facilitar la lectura, se puede poner el código entre las etiquetas de código o el uso de 'caracteres alrededor de ellos –

+0

formato para que sea fácil de leer y por favor enviar el código. –

Respuesta

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

Aquí hay un ejemplo que puede utilizar para probarlo, y ver que hace lo que necesita.

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

Salida:

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 fecha es: 26.08.2010

+0

Creo que el elenco no es necesario, ya que 'GregorianCalendar extends Calendar' –

+1

@ FarmBoy, sí, pero el mapa definido devuelve' Objeto' por lo que se necesita el elenco. – OscarRyz

+0

Muchas gracias. Lo obtuve Recibí el formato que especificó (Jue 26 Ago 07:07:27 CDT 2010). pero necesito como 26.08.2010. es posible obtener una función predefinida. ¿Cómo puedo obtener así – Twity

5

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

De java.util.Calendar-java.sql.Date

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

** ** NOTA

java.sql.Timestamp es un hermano de java.sql.Date y ambos se extiende java.util.Date, por lo tanto, se puede utilizar ya sea exactamente del mismo modo.

Además, para convertir una cadena de fecha en un objeto de fecha, utilice 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); 

Y para revertirla

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

Copiar y ejecutar el ejemplo.

Simplemente cambie el modo para probar las diferentes condiciones del interruptor.

Para la encapsulación acaba de hacer un par de métodos privados. El formato de fecha no es su tarea porque el método ahora está devolviendo fecha y le corresponde a quien llama usar el formato que quiera.

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