Java中Date和Calender类的使用方法.docx
- 文档编号:10606075
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:10
- 大小:20.80KB
Java中Date和Calender类的使用方法.docx
《Java中Date和Calender类的使用方法.docx》由会员分享,可在线阅读,更多相关《Java中Date和Calender类的使用方法.docx(10页珍藏版)》请在冰豆网上搜索。
Java中Date和Calender类的使用方法
Java中Date和Calender类的使用方法
Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着很重要的地位,所以在这里想对这两个类进行一个基本的讲解,由于技术有限,不到之处请指正。
Date类顾名思义,一看就知道是和日期有关的类了,这个类最主要的作用就是获得当前时间了,然而这个类里面也具有设置时间以及一些其他的功能,可是由于本身设计的问题,这些方法却遭到众多批评,而这些遭受批评的功能都已移植到另外一个类里面,这就是今天要讲到的第二个类Calendar里面。
在讲两个类之前,这里又不能不多提一个类,那就是DateFormat类,这个类是用来格式化日期的,稍后也会讲到。
首先,让我们来看一个获取当前时间的例子:
Datedate=newDate();
System.out.println(date.getTime());上面的语句首先创建了Date的一个对象,接着使用getTime方法获得当前的时间,但是注意了,输出后的结果确实一串长整型的数字,这是为什么?
实际上这是系统根据当前时间计算出来的一个long型的数,至于是如何计算出来的就不在本文中讲述了,那既然这样的话又如何显示正确的时间呢?
这就要利用到上面的DateFormat类了,这个类是一个基类,它有一个子类是SimpleDateFormat,具体用法请看下面的代码:
Datedate=newDate();
SimpleDateFormatdateFm=newSimpleDateFormat("EEEE-MMMM-dd-yyyy");
System.out.println(dateFm.format(date));这段代码开始创建了一个Date的对象,用来获取当前时间,而重点就在于后面的SimpleDateFormat对象,这个对继承了DateFormat,利用format方法对Date对象进行格式化,然后输出,而格式的定制是由用户定制的,EEEE代表星期,MMMM代表月份,而dd代表日,yyyy代表年。
使用这个方法就可以根据用户自定义的格式进行输出时间。
上面介绍了由用户自定义格式的输出时间,下面将来介绍通过JAVA类库提供的标准格式输出时间,这就要用到DateFormat类了,请看以下代码:
Datedate=newDate();
DateFormatdateFm=DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.SHORT);
System.out.println(dateFm.format(date));这里使用的方法和用户自定义的方法差不多,只是这里使用的是一个抽象类,由于DateFormat是一个抽象类,所以它不能通过构造函数构造对象,在这里是通过getDateTimeInstance()方法获得该对象,而所传递的参数就是DateFormat里面定义的一些常量,系统根据这些常量输出当前时间,由于这里使用的是getDateTimeInstance方法,所以将传递两个常量参数,用来分别格式化日期和当前的时间。
上面讲述了如何获得系统时间以及如何格式化输出,那如果想获取或者设置时间当中的某一部分又该如何呢?
例如年,月,日。
这就要靠Calendar这个类了,这个类也是一个抽象类,它有一个子类GregorianCalendar,接下来我会利用这个子类来演示这个过程,请看以下代码:
DateFormatdateFormat=DateFormat.getDateInstance(DateFormat.FULL);
GregorianCalendarcal=newGregorianCalendar();
cal.setTime(newDate());
System.out.println("SystemDate:
"+dateFormat.format(cal.getTime()));
cal.set(GregorianCalendar.DAY_OF_WEEK,GregorianCalendar.FRIDAY);
System.out.println("AfterSettingDayofWeektoFriday:
"+
dateFormat.format(cal.getTime()));
这段代码当中,首先创建了一个DateFormat对象进行格式设置,接着创建了一个GregorianCalendar对象cal,接着使用cal.setTime()方法设置cal对象中的时间为当前时间,然后通过format格式化由cal.getTime()返回的时间进行输出,后面利用set方法设置cal的日期为当前星期的FRIDAY,此时cal中存储的时间就是这个星期五的该时刻,而后面利用format格式化输出,假如当前时间为2005年1月27日星期4的11点30分,那么最后将那句将会输出2005年1月28日星期5的11点30分。
在JDK1.1后,java.util.Date类型的大多数方法已经不推荐使用了。
代替它的是Calendar。
而在java.sql.Date和java.util.Date之间,有些微妙的关系。
如何将Date类型插入数据库中,成为好多人的一个不小的障碍。
我们将讨论下面的类:
1、具体类(和抽象类相对)java.util.Date
2、抽象类java.text.DateFormat和它的一个具体子类,java.text.SimpleDateFormat
3、抽象类java.util.Calendar和它的一个具体子类,java.util.GregorianCalendar
具体类可以被实例化,但是抽象类却不能.你首先必须实现抽象类的一个具体子类.
Date类从Java开发包(JDK)1.0就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法,比如说月,日,和年.这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,我们将在本文中进一步讨论它.这种改进旨在更好的处理日期数据的国际化格式.就象在JDK1.1中一样,Date类实际上只是一个包裹类,它包含的是一个长整型数据,表示的是从GMT(格林尼治标准时间)1970年,1月1日00:
00:
00这一刻之前或者是之后经历的毫秒数.
一、创建一个日期对象r
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子.这个时间通常被称为Java虚拟机(JVM)主机环境的系统时间.
importjava.util.Date;
publicclassDateExample1{
publicstaticvoidmain(String[]args){
//Getthesystemdate/time
Datedate=newDate();
System.out.println(date.getTime());
}
}
在星期六,2001年9月29日,下午大约是6:
50的样子,上面的例子在系统输出设备上显示的结果是1001803809710.在这个例子中,值得注意的是我们使用了Date构造函数创建一个日期对象,这个构造函数没有接受任何参数.而这个构造函数在内部使用了System.currentTimeMillis()方法来从系统获取日期.
那么,现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了.我们如何才能以一种用户明白的格式来显示这个日期呢?
在这里类java.text.SimpleDateFormat和它的抽象基类java.text.DateFormat就派得上用场了.
二、日期数据的定制格式
假如我们希望定制日期数据的格式,比方星期六-9月-29日-2001年.下面的例子展示了如何完成这个工作:
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassDateExample2{
publicstaticvoidmain(String[]args){
SimpleDateFormatbartDateFormat=
newSimpleDateFormat("EEEE-MMMM-dd-yyyy");
Datedate=newDate();
System.out.println(bartDateFormat.format(date));
}
}
只要通过向SimpleDateFormat的构造函数传递格式字符串"EEE-MMMM-dd-yyyy",我们就能够指明自己想要的格式.你应该可以看见,格式字符串中的ASCII字符告诉格式化函数下面显示日期数据的哪一个部分.EEEE是星期,MMMM是月,dd是日,yyyy是年.字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示Sat-09-29-01.请察看Sun公司的Web站点获取日期格式化选项的完整的指示.
三、将文本数据解析成日期对象r
假设我们有一个文本字符串包含了一个格式化了的日期对象,而我们希望解析这个字符串并从文本日期数据创建一个日期对象.我们将再次以格式化字符串"MM-dd-yyyy"调用SimpleDateFormat类,但是这一次,我们使用格式化解析而不是生成一个文本日期数据.我们的例子,显示在下面,将解析文本字符串"9-29-2001"并创建一个值为001736000000的日期对象.
例子程序:
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassDateExample3{
publicstaticvoidmain(String[]args){
//Createadateformatterthatcanparsedatesof
//theformMM-dd-yyyy.
SimpleDateFormatbartDateFormat=
newSimpleDateFormat("MM-dd-yyyy");
//Createastringcontainingatextdatetobeparsed.
StringdateStringToParse="9-29-2001";
try{
//Parsethetextversionofthedate.
//Wehavetoperformtheparsemethodina
//try-catchconstructincasedateStringToParse
//doesnotcontainadateintheformatweareexpecting.
Datedate=bartDateFormat.parse(dateStringToParse);
//Nowsendtheparseddateasalongvalue
//tothesystemoutput.
System.out.println(date.getTime());
}
catch(Exceptionex){
System.out.println(ex.getMessage());
}
}
}
五、使用标准的日期格式化过程
既然我们已经可以生成和解析定制的日期格式了,让我们来看一看如何使用内建的格式化过程.方法DateFormat.getDateTimeInstance()让我们得以用几种不同的方法获得标准的日期格式化过程.在下面的例子中,我们获取了四个内建的日期格式化过程.它们包括一个短的,中等的,长的,和完整的日期格式.
importjava.text.DateFormat;
importjava.util.Date;
publicclassDateExample4{
publicstaticvoidmain(String[]args){
Datedate=newDate();
DateFormatshortDateFormat=
DateFormat.getDateTimeInstance(
DateFormat.SHORT,
DateFormat.SHORT);
DateFormatmediumDateFormat=
DateFormat.getDateTimeInstance(
DateFormat.MEDIUM,
DateFormat.MEDIUM);
DateFormatlongDateFormat=
DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.LONG);
DateFormatfullDateFormat=
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL);
System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
}
注意我们在对getDateTimeInstance的每次调用中都传递了两个值.第一个参数是日期风格,而第二个参数是时间风格.它们都是基本数据类型int(整型).考虑到可读性,我们使用了DateFormat类提供的常量:
SHORT,MEDIUM,LONG,和FULL.要知道获取时间和日期格式化过程的更多的方法和选项,请看Sun公司Web站点上的解释.
运行我们的例子程序的时候,它将向标准输出设备输出下面的内容:
9/29/018:
44PM
Sep29,20018:
44:
45PM
September29,20018:
44:
45PMEDT
Saturday,September29,20018:
44:
45PMEDT
当然,并不一定要在外部插入时间,因为在数据库中,可以让它自动插入,比如:
MSSQL里面,用
getdate()来插入当前时间,而在Insert时,便可以不用管它了。
但有的时候还是避免不了,要手工插入
时间,以更新数据库。
六、java.util.Calendar格式化时间
Calendarcal=newGregorianCalendar();
intyear=cal.get(Calendar.YEAR);
intmonth=cal.get(Calendar.MONTH)+1;
intday=cal.get(Calendar.DAY_OF_MONTH);
intdayOfWeek=cal.get(Calendar.DAY_OF_WEEK);
Stringweek="";
switch(dayOfWeek){
case1:
week="星期天";break;
case2:
week="星期一";break;
case3:
week="星期二";break;
case4:
week="星期三";break;
case5:
week="星期四";break;
case6:
week="星期五";break;
default:
week="星期六";break;
inthour=cal.get(Calendar.HOUR_OF_DAY);//24小时制
//inthour=cal.get(Calendar.HOUR);//12小时制
intminute=cal.get(Calendar.MINUTE);
intsecond=cal.get(Calendar.SECOND);
Stringh,m,s;
if(hour<10)h="0"+hour;elseh=hour+"";
if(minute<10)m="0"+minute;elsem=minute+"";
if(second<10)s="0"+second;elses=second+"";
在JSP中输出是:
今天是:
年月日:
:
结果:
今天是:
2006年4月14日星期五05:
35:
26
2、在数据库中插入时间
PreparedStatementps=con.prepareStatement("insertintoTableName(dAddTime)values(?
)");
这里有三种方式:
1)ps.setDate(1,newjava.sql.Date(System.currentTimemillis()));
2)ps.setTime(2,newjava.sql.Time(System.currentTimemillis()));
3)ps.setTimestamp(3,newjava.sql.Timestamp(System.currentTimemillis()));
第一种只插入年月日0000-00-00
常用格式的实现:
SimpleDateFormatformatterhwy=newSimpleDateFormat("yyyy-MM-dd");
java.util.Datesyscurrentime=newjava.util.Date();
Stringcurrentsysdate=formatterhwy.format(syscurrentime);
SimpleDateFormatmyformatter=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
java.util.Datemycurrentime=newjava.util.Date();
Stringmycurrentdate=myformatter.format(mycurrentime);
SimpleDateFormatformatterms=newSimpleDateFormat("yyyy-MM-ddHH:
mm");
java.util.Datecurrentimems=newjava.util.Date();
Stringcurrentdatems=formatterms.format(currentimems);
SimpleDateFormatformatterms1=newSimpleDateFormat("yyyyMMdd");
java.util.Datecurrentimems1=newjava.util.Date();
Stringcurrentdatems1=formatterms1.format(currentimems1);
longtoday=System.currentTimeMillis();
java.util.Datetodaytime=newjava.util.Date(today);
SimpleDateFormatformattertoday=newSimpleDateFormat("yyyy-MM-dd");//今天的日期
Stringtodaydate=formattertoday.format(todaytime);
longyestoday=today-86400000;
java.util.Dateyestodaytime=newjava.util.Date(yestoday);
SimpleDateFormatformatteryestoday=newSimpleDateFormat("yyyy-MM-dd");//昨天的日期
Stringyestodaydate=formatteryestoday.format(yestodaytime);
longlasthour=today-3600000;
java.util.Datelasthourtime=newjava.util.Date(lasthour);
SimpleDateFormatformattershour=newSimpleDateFormat("yyyy-MM-ddHH:
00:
00");//某天的上一个小时开始时间
SimpleDateFormatformatterehour=newSimpleDateFormat("yyyy-MM-ddHH:
59:
59");//某天的上一个小时结束时间
Stringlastshourdate=formattershour.format(lasthourtime);
Stringlastehourdate=formatterehour.format(lasthourtime);
longfristday=System.currentTimeMillis();//每月的第一天
java.util.Datefristdaytime=newjava.util.Date(fristday);
SimpleDateFormatformatterfristday=newSimpleDateFormat("yyyy-MM-dd");//昨天的日期
Stringfristdate=formatterfristday.format(fristdaytime);
if(fristdate.substring(fristdate.length()-2).equals("01")){
//是
}
例子:
Calendarca=Calendar.getInstance();
java.util.Datenowdate=newjava.util.Date();//得到当前时间
ca.setTime(nowdate);
ca.set(Calendar.DAY_OF_YEAR,ca.get(Calendar.DAY_OF_YEAR)-1);//你想要前几天的,就减去几天
Datenow=newDate(ca.getTimeInMillis());//这个就是前n天的时间
publicstaticStringGetWeekSAndE(intyear,intweeki){//返回周开始日期和结束日期用逗号隔开
Stringsdate="";
String
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java Date Calender 使用方法
![提示](https://static.bdocx.com/images/bang_tan.gif)