jdk对日期的操作及相关api.docx
《jdk对日期的操作及相关api.docx》由会员分享,可在线阅读,更多相关《jdk对日期的操作及相关api.docx(17页珍藏版)》请在冰豆网上搜索。
jdk对日期的操作及相关api
java日期转化操作大全
时间和日期中常用到的几个类:
java.util.Date,
java.util.Calendar,
java.util.GregorainCalendar,
java.text.DateFormat,
java.text.SimpleDateFormat
java.util.Date常用的构造方法:
Date();
Date(longdate)
(longdate)表示从标准基准时间(称为"历元"epoch,即1970.1.1
00:
00:
00GMT)经历的毫秒数。
主要的方法:
(介绍几个常用的,详细的查询jdk文档)
booleanafter(Datewhen)测试日期在此日期之后。
booleanbefore(Datewhen)测试日期在此日期之前。
Objectclone()返回此对象的副本
longgetTime()返回自1970.1.100:
00:
00GMT后,此对象表示的毫秒数
voidsetTime(longtime)设置此Date对象,以表示1970年1月1日
00:
00:
00GMT以后time毫秒的时间点。
StringtoString()将Date对象转化成以下形式的
String:
dowmonddhh:
mm:
sszzzyyyy
其中:
dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)。
mon是月份(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)。
dd是一月中的某一天(01至31),显示为两位十进制数。
hh是一天中的小时(00至23),显示为两位十进制数。
mm是小时中的分钟(00至59),显示为两位十进制数。
ss是分钟中的秒数(00至61),显示为两位十进制数。
60,61是因为有"润秒"
zzz是时区(并可以反映夏令时)。
标准时区缩写包括方法parse识别的时区缩写。
如果不提供时区信息,则zzz为空,即根本不包括任何字符。
yyyy是年份,显示为4位十进制数。
使用System.currentTimeMillis()获得当前系统时间的毫秒数
java.util.Calendar:
Calendar类是一个抽象类.
CalendarrightNow=Calendar.getInstance();
可以使用三种方法更改日历字段:
set()、add()和roll()。
set(f,value)将日历字段f更改为value。
此外,它设置了一个内部成员变量,以指示日历字段f已经被更改。
尽管日历字段
f是立即更改的,但是直到下次调用get()、getTime()、getTimeInMillis()、
add()或roll()时才会重新计算日历的时间值(以毫秒为单位)。
因此,多次调用set()不会触发多次不必要的计算。
add(f,delta)将delta添加到f字段中。
这等同于调用
set(f,get(f)+delta)
roll(f,delta)将delta添加到f字段中,但不更改更大的字段。
java.util.GregorianCalendar:
GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家
使用的标准日历系统。
java.text.DateFormat:
DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并
分析日期或时间。
java.text.SimpleDateFormat:
SimpleDateFormat是一个以与语言环境相关的方式来格式化和分析日期的具体类。
它允许进行格式化(日期->文本)、分析(文本->日期)和规范化。
SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。
但是,
仍然建议通过DateFormat中的getTimeInstance、getDateInstance或
getDateTimeInstance来新的创建日期-时间格式化程序。
每一个这样的类方法
都能够返回一个以默认格式模式初始化的日期/时间格式化程序。
可以根据需要使用
applyPattern方法来修改格式模式。
日期和时间格式由日期和时间模式字符串指定。
在日期和时间模式字符串中,未加引号的字母'A'到'Z'和'a'到'z'
被解释为模式字母,用来表示日期或时间字符串元素。
字母日期或时间元素表示示例
GEra标志符TextAD
y年Year1996;96
M年中的月份MonthJuly;Jul;07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday;Tue
aAm/pm标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm中的小时数(0-11)Number0
ham/pm中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
获得当前系统的毫秒数:
Java代码
packageorg.lokvin.example.calendar;
publicclassCalendarExample1{
publicstaticvoidmain(String[]args){
java.util.Datedate=newjava.util.Date();
//获得当前系统的毫秒数,自1970.1.100:
00:
00GMT
longtime=System.currentTimeMillis();
java.util.Datedate1=newjava.util.Date(time);
System.out.println("date="+date.toString());
System.out.println("millisecond="+time);
System.out.println("date1="+date1.toString());
}}
运行结果:
date=MonDec0416:
01:
16CST2006
millisecond=1165219276771
date1=MonDec0416:
01:
16CST2006
Java代码
packageorg.lokvin.example.calendar;
importjava.util.Calendar;
importjava.util.GregorianCalendar;
publicclassCalendarExample2{
publicstaticvoidmain(String[]args){
//获得当前日期
intyear=calendar.get(Calendar.YEAR);//200
System.out.println("YEAR="+year);
//获得当前月份,0..11表示JAN..DEC
intmonth=calendar.get(Calendar.MONTH);
System.out.println("Month="+month);//0=JAN...11=DEC
intday=calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("DayofMonth="+day);//1
//获得日期在本周的天数,Sun=1,Mon=2...Sta=7
intday_of_week=calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("DayofWeek="+day_of_week);
//获得当前时间12时制是Calendar.HOUR
inthour12=calendar.get(Calendar.HOUR);
//获得AM,PM,0=AM,1=PM
intampm=calendar.get(Calendar.AM_PM);
System.out.println("hour12="+hour12);
System.out.println("ampm="+ampm);//0=am,1=pm
//获得当前时间24时制Calendar.HOUR_OF_DAY
inthour24=calendar.get(Calendar.HOUR_OF_DAY);
System.out.println("hour24="+hour24);
Calendartoday=newGregorianCalendar(2006,Calendar.DECEMBER,4);
//Calendar.getInstance()得到当前具体到毫秒的一个时间点
System.out.println("calendar="+calendar.getTime().toString());
//通过newGregorianCalendar(2006,Calendar.DECEMBER,4)
//生成的calendar除了指定的年,月,日其余为0(时分秒=0)
System.out.println("today="+today.getTime().toString());
}
}
两个日期之间的比较:
查看源代码
packageorg.lokvin.example.calendar;
importjava.util.Calendar;
importjava.util.GregorianCalendar;
/*
*比较两个calendar对象之间的先后
*/
publicclassCalendarExample3{
publicstaticvoidmain(String[]args){
//日期比较
Calendarxmas=newGregorianCalendar(2006,Calendar.DECEMBER,25);
CalendarnewYear=newGregorianCalendar(2007,Calendar.JANUARY,1);
//比较两个日期先后
booleanflag=xmas.before(newYear);
System.out.println("flag="+flag);
flag=xmas.after(newYear);
System.out.println("flag="+flag);
//两个日期相差的毫秒数
longtimeDiffMillis=newYear.getTimeInMillis()-xmas.getTimeInMillis();
System.out.println("timediffmillis="+timeDiffMillis);
//两个日期相差的秒数
longdiffSecs=timeDiffMillis/1000;
System.out.println("timediffsecs="+diffSecs);
//两个日期相差的分钟
longdiffMins=timeDiffMillis/(1000*60);
System.out.println("timediffmins="+diffMins);
//两个日期相差的小时
longdiffHours=timeDiffMillis/(1000*60*60);
System.out.println("timediffhours="+diffHours);
//两个日期相差的天
longdiffDays=timeDiffMillis/(1000*60*60*24);
System.out.println("timediffdays="+diffDays);
}
}
运行结果:
引用
flag=true
flag=false
timediffmillis=604800000
timediffsecs=604800
timediffmins=10080
timediffhours=168
timediffdays=7
使用Calendar计算年龄:
代码:
packageorg.lokvin.example.calendar;
importjava.util.Calendar;
importjava.util.GregorianCalendar;
/*
*计算年龄
*/
publicclassCalendarExample4{
publicstaticvoidmain(String[]args){
//创建生日的Calendar对象
CalendarbirthDate=newGregorianCalendar(1979,Calendar.JULY,7);
Calendartoday=Calendar.getInstance();
intage=today.get(Calendar.YEAR)-birthDate.get(Calendar.YEAR);
//如果还没有过生日,则age-1
birthDate.add(Calendar.YEAR,age);
if(today.before(birthDate)){
age--;
}
System.out.println("age="+age);
}
}
判断是否为闰年:
代码
packageorg.lokvin.example.calendar;
importjava.util.GregorianCalendar;
/*
*判断是否为闰年leapyear
*/
publicclassCalendarExample5{
publicstaticvoidmain(String[]args){
//判断是否"闰年"leapyear
GregorianCalendarcal=newGregorianCalendar();
booleanisLeapYear=cal.isLeapYear(1998);
System.out.println("isleapyear1998="+isLeapYear);
isLeapYear=cal.isLeapYear(2000);
System.out.println("isleapyear2000="+isLeapYear);
}
}
格式化日期:
Java代码
packageorg.lokvin.example.calendar;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassDateForamExample{
publicstaticvoidmain(String[]args){
DaterightNow=newDate();
DateFormatformat1=newSimpleDateFormat("yyyy-MM-ddhh:
mm:
ss");
DateFormatformat2=newSimpleDateFormat("yyyy-MM-dd");
DateFormatformat3=newSimpleDateFormat("h:
mma");
DateFormatformat4=newSimpleDateFormat("yyyy.MM.ddG'at'HH:
mm:
ssz");
DateFormatformat5=newSimpleDateFormat("EEE,MMM,dd,''yyyy");
DateFormatformat6=newSimpleDateFormat("yyyy.MM.ddkk:
mm'o''clock'a,zzzz");
DateFormatformat7=newSimpleDateFormat("yyyyy.MMMMM.ddGGGhh:
mmaaa");
System.out.println("format1="+format1.format(rightNow));
System.out.println("format2="+format2.format(rightNow));
System.out.println("format3="+format3.format(rightNow));
System.out.println("format4="+format4.format(rightNow));
System.out.println("format5="+format5.format(rightNow));
System.out.println("format6="+format6.format(rightNow));
System.out.println("format7="+format7.format(rightNow));
}
}
输出结果:
引用
format1=2006-12-0506:
12:
02
format2=2006-12-05
format3=6:
12下午
format4=2006.12.05公元at18:
12:
02CST
format5=星期二,十二月,05,'2006
format6=2006.12.0518:
12o'clock下午,中国标准时间
format7=02006.十二月.05公元06:
12下午
取当月的第一天:
java.text.SimpleDateFormatformat=newjava.text.SimpleDateFormat("yyyy-MM-01");
java.util.DatefirstDay=newjava.util.Date();
System.out.println("themonthfirstdayis"+formats.format(firstDay));
取当月的最后一天:
Calendarcal=Calendar.getInstance();
intmaxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);//重要api
java.text.Formatformatter3=newjava.text.SimpleDateFormat("yyyy-MM-"+maxDay);
System.out.println(formatter3.format(cal.getTime()));
Java将Unix时间戳转换成普通日期
publicStringTimeStampDate(StringtimestampString){
Longtimestamp=Long.parseLong(timestampString)*1000;
Stringdate=newjava.text.SimpleDateFormat("yyyy/MM/ddHH:
mm:
ss").format(newjava.util.Date(timestamp));
returndate;
}
多来几个经典的实例
1.计算某一月份的最大天数
Calendartime=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);//year为int
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
intday=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:
在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
2.Calendar和Date的转化
(1)Calendar转化为Date
Calendarcal=Calendar.getInstance();
Datedate=cal.getTime();
(2)Date转化为Calendar
Datedate=newDate();
Calendarcal=Calendar.getInstance();
cal.setTime(date);
3.格式化输出日期时间(这个用的比较多)
其一
Datedate=newDate();
SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddhh:
mm:
ss");
Stringtime=df.format(date);
System.out.println(time);//2008-10-2708:
52:
32
其二
Calendarc=Calendar.getInstance();
System.out.println(c.getTime()