2010-08-26 19 views
17

मेरे पास Map है जिसमें किसी व्यक्ति का जन्मतिथि GregorianCalendar है।मुझे अपने कैलेंडर से दिनांक कैसे प्राप्त हो सकता है?

उदाहरण के लिए:

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

मैं एक Date जरूरत है, लेकिन मेरे डेटाबेस में यह केवल Calendar प्रारूप में है। डेटाबेस में कॉलम का डेटाटाइप DateTime है। मैं Date प्रारूप में जन्मतिथि कैसे प्राप्त कर सकता हूं?

+1

पठनीयता के लिए अपने कोड को स्वरूपित कृपया, आप 'का उपयोग कर उन्हें चारों ओर वर्ण –

+0

प्रारूप यह पठनीय बनाने के लिए कोड टैग या के बीच कोड डाल सकते हैं और कोड पोस्ट करें। –

उत्तर

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

यहां एक नमूना आप इसे परीक्षण, और यह आपको क्या चाहिए होता है देखने के लिए उपयोग कर सकते हैं।

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

आउटपुट:

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

तारीख है: 26.08.2010

+0

मुझे लगता है कि कास्ट अनावश्यक है, क्योंकि 'ग्रेगोरियन कैलेंडर कैलेंडर' –

+1

@ फ़र्मबॉय बढ़ाता है, हां, लेकिन नक्शा परिभाषित 'ऑब्जेक्ट' देता है ताकि कलाकार की आवश्यकता हो। – OscarRyz

+0

आपको बहुत बहुत धन्यवाद। मुझे यह मिला मुझे आपके द्वारा निर्दिष्ट प्रारूप मिला (अगस्त 26 07:07:27 सीडीटी 2010)। लेकिन मुझे 26.08.2010 की तरह चाहिए। क्या पूर्वनिर्धारित कार्य प्राप्त करना संभव है। मैं उस – Twity

5

java.sql.Date से java.util.Calendar (या 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); 

को java.util.Calendar से java.sql.Date

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

** नोट **

java.sql.Timestampjava.sql.Date का एक भाई है और दोनों java.util.Date फैली हुई है, इसलिए आप या तो ठीक उसी तरह उपयोग कर सकते हैं।

इसके अलावा, एक तारीख वस्तु में एक तारीख स्ट्रिंग परिवर्तित करने के लिए, 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); 

और रिवर्स यह

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

कॉपी और उदाहरण चलाने के लिए।

विभिन्न स्विच स्थितियों का परीक्षण करने के लिए बस मोड बदलें।

encapsulation के लिए बस कुछ तरीकों से निजी बनाया गया। दिनांक स्वरूपण करना आपका काम नहीं है क्योंकि विधि अब वापस लौट रही है और यह कॉलर पर निर्भर करता है कि वह कभी भी प्रारूप का उपयोग करे।

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)); 
    } 
} 
संबंधित मुद्दे