[英]How can I get a Date from my Calendar?
我有一張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
格式獲取生日?
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=[]
}
日期是:2010年8月26日
從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.Timestamp
是兄弟java.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
復制並運行示例。
只需更改模式即可測試不同的開關條件。
對於封裝,只需要將幾個方法設為私有。 日期格式化不是你的工作,因為方法現在返回日期,並且調用者可以使用他想要的格式。
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));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.