java中各种时间格式的转化.docx
《java中各种时间格式的转化.docx》由会员分享,可在线阅读,更多相关《java中各种时间格式的转化.docx(10页珍藏版)》请在冰豆网上搜索。
java中各种时间格式的转化
java中各种时间格式的转化
时间和日期中常用到的几个类:
java.util.Date,
java.util.Calendar,
java.util.GregorainCalendar,
java.text.DateFormat,
java.text.SimpleDateFormat
java.util.Date:
表示特定瞬间,精确到毫秒
一天是24*60*60=86400秒
世界时(UT或UTC),格林威治时间(GMT),格林威治时(GMT)和世界时(UT)
是相等的,格林威治时(GMT)是标准的"民间"称呼,世界时(UT)是相同标准的
科学称呼。
UTC和UT的区别是:
UTC是基于原子时钟的,UT是基于天体观察的。
(中文版的jdk真是好啊,跟科普教材是的,呵呵)
常用的构造方法:
Date();
Date(longdate)
(longdate)表示从标准基准时间(称为"历元"epoch,即1970.1.1
00:
00:
00GMT)经历的毫秒数。
还有一些构造方法已经deprecated了
主要的方法:
(介绍几个常用的,详细的查询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)。
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
z时区GeneraltimezonePacificStandardTime;PST;GMT-08:
00
Z时区RFC822timezone-0800
引用
日期和时间模式结果
"yyyy.MM.ddG'at'HH:
mm:
ssz"2001.07.04ADat12:
08:
56PDT
"EEE,MMMd,''yy"Wed,Jul4,'01
"h:
mma"12:
08PM
"hh'o''clock'a,zzzz"12o'clockPM,PacificDaylightTime
"K:
mma,z"0:
08PM,PDT
"yyyyy.MMMMM.ddGGGhh:
mmaaa"02001.July.04AD12:
08PM
"EEE,dMMMyyyyHH:
mm:
ssZ"Wed,4Jul200112:
08:
56-0700
"yyMMddHHmmssZ"010704120856-0700
"yyyy-MM-dd'T'HH:
mm:
ss.SSSZ"2001-07-04T12:
08:
56.235-0700
获得当前系统的毫秒数:
代码
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
代码
packageorg.lokvin.example.calendar;
importjava.util.Calendar;
importjava.util.GregorianCalendar;
publicclassCalendarExample2{
publicstaticvoidmain(String[]args){
//获得当前日期
Calendarcalendar=Calendar.getInstance();
intera=calendar.get(Calendar.ERA);//0=BC,1=AD
System.out.println("ERA="+era);
intyear=calendar.get(Calendar.YEAR);//2006
System.out.println("YEAR="+year);
intmonth=calendar.get(Calendar.MONTH);
//获得当前月份,0..11表示JAN..DEC
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());
}
}
运行结果:
引用
ERA=1
YEAR=2006
Month=11
DayofMonth=4
DayofWeek=2
hour12=4
ampm=1
hour24=16
calendar=MonDec0416:
22:
42CST2006
today=MonDec0400:
00:
00CST2006
两个日期之间的比较:
代码
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);
}
}
运行结果:
引用
isleapyear1998=false
isleapyear2000=true
获得其他时区的时间:
代码
packageorg.lokvin.example.calendar;
importjava.util.Calendar;
importjava.util.GregorianCalendar;
importjava.util.TimeZone;
/*
*获得其他时区当前时间
*/
publicclassCalendarExample6{
publicstaticvoidmain(String[]args){
Calendarcal=newGregorianCalendar();
inthour12=cal.get(Calendar.HOUR);
inthour24=cal.