Java语言的Calendar和Date类.docx
- 文档编号:27936962
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:34
- 大小:31.75KB
Java语言的Calendar和Date类.docx
《Java语言的Calendar和Date类.docx》由会员分享,可在线阅读,更多相关《Java语言的Calendar和Date类.docx(34页珍藏版)》请在冰豆网上搜索。
Java语言的Calendar和Date类
Java——Calendar\Date操作时间
------------------------ 系统当前时间------------------------
//通过格式化输出日期1
java.text.SimpleDateFormatformat=newjava.text.SimpleDateFormat("yyyy-MM-dd hh:
mm:
ss");
System.out.println("TheTimeis:
"+format.format(Calendar.getInstance().getTime()));
System.out.println("yesterdayis:
"+format.format(cal.getTime()));
//通过格式化输出日期2
Datedate=newDate();
SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddhh:
mm:
ss");
System.out.println(df.format(date));
Calendarcal=Calendar.getInstance();//使用默认时区和语言环境获得一个日历
cal.add(Calendar.DAY_OF_MONTH,-1);//取当前日期的前一天.
cal.add(Calendar.DAY_OF_MONTH,+1);//取当前日期的后一天.
-------------------GregorianCalendar的一些操作---------------------
//GregorianCalendar构造方法参数依次为:
年,月-1,日,时,分,秒.
得到2011-10-13日期:
Calendarcalendar=newGregorianCalendar(2011,9,13,0,0,0);
Datedate=calendar.getTime();System.out.println("Dateis:
"+format.format(date));//java月份是从0- 11,月份设置时要减1 .
//GregorianCalendar构造方法参数依次为:
年,月-1,日,时,分,秒.
取日期的部分:
intyear=calendar.get(Calendar.YEAR);
intmonth=calendar.get(Calendar.MONTH)+1;
intday=calendar.get(Calendar.DAY_OF_MONTH);
inthour=calendar.get(Calendar.HOUR_OF_DAY);
intminute=calendar.get(Calendar.MINUTE);
intseconds=calendar.get(Calendar.SECOND);
取月份要加1.
------------------------判断当前月份的最大天数-----------------------
Calendarcal=Calendar.getInstance();
intday=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(day);
java.util.Date
------------------------取当月的第一天------------------------
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-01");
DatefirstDay=newDate();
System.out.println("themonthfirstdayis"+formats.format(firstDay));
------------------------取当月的最后一天------------------------
Calendarcal=Calendar.getInstance();
intmaxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);
java.text.Formatformatter3=newSimpleDateFormat("yyyy-MM-"+maxDay);
System.out.println(formatter3.format(cal.getTime()));
------------------------Calendar和Date的转化------------------------
(1)Calendar转化为Date
Calendarcal=Calendar.getInstance();
Datedate=cal.getTime();
(2)Date转化为Calendar
Datedate=newDate();
Calendarcal=Calendar.getInstance();
cal.setTime(date);
------------------------两个时间之间的天数------------------------
SimpleDateFormatmyFormatter=newSimpleDateFormat("yyyy-MM-dd");
Datedate=myFormatter.parse("2003-05-1");
Datemydate=myFormatter.parse("1899-12-30");
longday=(date.getTime()-mydate.getTime())/(24*60*60*1000);
Java语言的Calendar和Date类
Java语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。
日期是商业逻辑计算一个关键的部分。
所有的开发者都应该能够计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象。
创建一个日期对象
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数。
这个时间通常被称为Java虚拟机(JVM)主机环境的系统时间。
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年.下面的例子展示了如何完成这个工作:
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。
将文本数据解析成日期对象
假设我们有一个文本字符串包含了一个格式化了的日期对象,我们希望解析这个字符串并从文本日期数据创建一个日期对象。
我们将再次以格式化字符串"MM-dd-yyyy"调用SimpleDateFormat类。
但是这一次,我们使用格式化解析而不是生成一个文本日期数据。
我们的例子,显示在下面,将解析文本字符串"9-29-2001"并创建一个值为001736000000的日期对象。
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()让我们得以用几种不同的方法获得标准的日期格式化过程。
下面是我们获取了四个内建的日期格式化过程。
它们包括一个短的,中等的,长的,和完整的日期格式。
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。
运行我们的例子程序的时候,它将向标准输出设备输出下面的内容:
9/29/018:
44PM
Sep29,20018:
44:
45PM
September29,20018:
44:
45PMEDT
Saturday,September29,20018:
44:
45PMEDT
Calendar类
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟?
我们又如何在日期的这些部分加上或者减去值呢?
答案是使用Calendar类。
假设你想要设置,获取,和操纵一个日期对象的各个部分,比方一个月的一天或者是一个星期的一天,为了演示这个过程,我们将使用具体的子类java.util.GregorianCalendar。
考虑下面的例子,它计算得到下面的第十个星期五是13号。
publicclassDateExample5{
publicstaticvoidmain(String[]args){
DateFormatdateFormat=DateFormat.getDateInstance(DateFormat.FULL);
//CreateourGregorianCalendar.
GregorianCalendarcal=newGregorianCalendar();
//Setthedateandtimeofourcalendar
//tothesystem′sdateandtime
cal.setTime(newDate());
System.out.println("SystemDate:
"+dateFormat.format(cal.getTime()));
//SetthedayofweektoFRIDAY
cal.set(GregorianCalendar.DAY_OF_WEEK,GregorianCalendar.FRIDAY);
System.out.println("AfterSettingDayofWeektoFriday:
"+dateFormat.format(cal.getTime()));
intfriday13Counter=0;
while(friday13Counter<=10){
//GotothenextFridaybyadding7days.
cal.add(GregorianCalendar.DAY_OF_MONTH,7);
//Ifthedayofmonthis13wehave
//anotherFridaythe13th.
if(cal.get(GregorianCalendar.DAY_OF_MONTH)==13){friday13Counter++;
System.out.println(dateFormat.format(cal.getTime()));
}
}
}
}
在这个例子中我们作了有趣的函数调用:
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
和:
cal.add(GregorianCalendar.DAY_OF_MONTH,7);
set方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五。
注意到这里我们使用了常量DAY_OF_WEEK和FRIDAY来增强代码的可读性。
add方法让我们能够在日期上加上数值,润年的所有复杂的计算都由这个方法自动处理。
我们这个例子的输出结果是:
SystemDate:
Saturday,September29,2001
当我们将它设置成星期五以后就成了:
Friday,September28,2001
Friday,September13,2002
Friday,December13,2002
Friday,June13,2003
Friday,February13,2004
Friday,August13,2004
Friday,May13,2005
Friday,January13,2006
Friday,October13,2006
Friday,April13,2007
Friday,July13,2007
Friday,June13,2008
时间掌握在你的手里
有了这些Date和Calendar类的例子,你应该能够使用java.util.Date,java.text.SimpleDateFormat,和java.util.GregorianCalendar创建许多方法了。
---------------
Java中Date类的应用
Date类实际上只是一个包裹类,它包含的是一个长整型数据,表示的是从GMT(格林尼治标准时间)1970年,1月1日00:
00:
00这一刻之前或者是之后经历的毫秒数.
创建一个日期对象
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子.这个时间通常被称为Java虚拟机(JVM)主机环境的系统时间.
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年.下面的例子展示了如何完成这个工作:
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站点获取日期格式化选项的完整的指示.
将文本数据解析成日期对象
假设我们有一个文本字符串包含了一个格式化了的日期对象,而我们希望解析这个字符串并从文本日期数据创建一个日期对象.我们将再次以格式化字符串"MM-dd-yyyy"调用SimpleDateFormat类,但是这一次,我们使用格式化解析而不是生成一个文本日期数据.我们的例子,显示在下面,将解析文本字符串"9-29-2001"并创建一个值为001736000000的日期对象.
例子程序:
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassDateExample3{
publicstaticvoidmain(String[]args){
//CreateadateformatterthatcanparsedatesoftheformMM-dd-yyyy.
SimpleDateFormatbartDateFormat=newSimpleDateFormat("MM-dd-yyyy");
//Createastringcontainingatextdatetobeparsed.
StringdateStringToParse="9-29-2001";
try{
//Parsethetextversionofthedate.
//Wehavetoperformtheparsemethodina
//try-catchconstructincasedateStr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言 Calendar Date