您的位置:首页 > 职场人生

黑马程序员--第一阶段5.JavaAPI--第16天

2012-04-25 11:05 204 查看
[align=center]-------------------- android培训java培训、期待与您交流!--------------------[/align]

Date与Calendar、DateFormat类
Date类用于表示日期和时间,最简单的构造函数是Date(),它以当前的日期和时间初始化一个Date对象。由于开始设计Date时没有考虑到国际化,所以后来又设计了两个新的类来解决Date类中的问题,一个是Calendar类,一个是DateFormat类。

Calendar类是一个抽象基类,主要用于完成日期字段之间相互操作的功能。

Calendar
类是一个抽象类,它为特定瞬间与一组诸如
YEAR
MONTH
DAY_OF_MONTH
HOUR
日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
Calendar
getInstance
方法返回一个
Calendar
对象,其日历字段已由当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();[/code]
Calendar.add方法可以实现在某一日期的基础上增加若干天(或年、月、小时、分、秒等日期字段)后的新日期。如:Calendar.add(c1.DAY_OF_YEAR,315);表示增加315天

Calendar.get、Calendar.set方法分别用来取出和修改日期对象中的年、月、日、小时、分、秒等日期字段的值。

Calendar.get()中的参数为一个常量,可以为Calendar.YEAR,也可以为实例对象.YEAR,如C1.YEAR,用这个常量表示取出年份。

Calendar.getInstance方法可以返回一个Calendar类型(更确切地说是它的某个子类)的对象实例。

GregorianCalendar类是JDK目前提供的一个惟一的Calendar子类,Calendar.getInstance方法返回的就是预设了当前时间的GregorianCalendar类对象。

下面的例子计算出距当前日期时间315天后的日期时间,并用“XXX年XX月XX日XX小时:XX分:XX秒”的格式输出。

import java.util.*;//Calendar位于此包中

import java.text.SimpleDateFormat;

public class TestCalendar {

public static void main(String[] args) {

Calendar c1=Calendar.getInstance();

System.out.println(c1.get(Calendar.YEAR)+"年"+(c1.get(c1.MONTH)+1)+"月"+

c1.get(c1.DAY_OF_MONTH)+"日:"+c1.get(c1.HOUR)+"时"+c1.get(c1.MINUTE)+

"分"+c1.get(c1.SECOND)+"秒");

c1.add(c1.DAY_OF_YEAR,315);

System.out.println(c1.get(Calendar.YEAR)+"年"+c1.get(c1.MONTH)+"月"+

c1.get(c1.DAY_OF_MONTH)+"日:"+c1.get(c1.HOUR)+"时"+c1.get(c1.MINUTE)+

"分"+c1.get(c1.SECOND)+"秒");

}

}

也可以不通过Calendar.getInstance方法返回GregorianCalendar类对象,而直接使用GregorianCalendar类,构造一个GregorianCalendar类对象来完成上面的任务。

虽然Calendar类与上面的Runtime类都不能用new操作符直接在类外部产生对象实例,都是用类的静态方法返回一个对象实例,但两者的实现机理完全是不一样的。下面的例子演示了Canlendar.getInstance()方法的实现过程。

public static Calendar getInstance()

{

return new GregorianCalendar(TimeZone.getDefault(),Locale.getDefault());

}

Date、DateFomat、SimpleDateFormat类
虽然Calendar类几乎完全替代了Date类,但在某些情况下,我们仍有可能要用到Date类,譬如,程序中用的另外一个类的方法要求一个Date类型的参数。我们有时要将用Date对象表示的日期用指定的格式输出和将特定格式的日期字符串转换成一个Date对象。java.text.DateFormat就是实现这种功能的抽象基类,java.text.SimpleDateFormat类是JDK目前提供的一个的DateFormat的子类,它是一个具体类,使用它就可以完成把Date对象格式化为本地字符串,或者通过语义分析把日期或时间字符串转换为Date对象的功能。下面的例子将“2002-03-15”格式的日期字符串转换成“2002年03月15日”。

import java.util.*;//Calendar位于此包中

import java.text.SimpleDateFormat;

public class TestCalendar

{

public static void main(String[] args)

{

SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");//用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");//用给定的模式和默认语言环境的日期格式符号构造
SimpleDateFormat。

try

{

Date d=sdf1.parse("2012-2-16");//解析字符串的文本,生成 Date。

System.out.println(sdf2.format(d));//将给定的 Date
格式化为日期/时间字符串

}catch(Exception e)

{

e.printStackTrace();

}

}

}

SimpleDateFormat类就相当于一个模板,其中yyyy对应的是年,MM对应的是月,dd对应的是日。

在上面程序中,我们定义了一个SimpleDateFormat类的对象sdf1来接收和转换源格式字符串“2003-03-15”,随后又定义了该类的另一个对象sdf2来接收sdf1转换成的Date类的对象,并用sdf2所定义的格式转换成字符串。

在这个过程中,我们已经实现了利用SimpleDateFormat类来把一个字符串转换成Date类对象,和把一个Date对象按我们指定的格式输出的两个功能。

注意:当我们要将一个字符串转换成Date类对象时,字符串中代表年份的字符必须在模版中yyyy的位置,y的个数指定了年的位数,在字符串中除了这些格式字符要被真实的日期数字替代之外,其他的字符必须原样出现,如:表示时间的字符串中的“-”的位置必须和创建SimpleDateFormat类对象时“-”的位置一样,同理,我们将日期转换成的字符串格式也是按照创建SimpleDataFormat类对象时指定的字符串格式而输出的。

Timer与TimerTask类

-----(位于java.util.*包中)

schedule,1、n.表;清单;目录;2、(美)时间表;课程表;时刻表
3、计划表、日程安排表 vt.. 1、将...列表(或清单等) 2、将...列入计划(或时间)表
3、(美)安排、预定

Timer.schedule方法,它可以指定过多长时间以后来启动一个任务线程来执行一些代码,或者每隔多长时间定期地调用一段任务代码,该方法主要有如下几种重载形式:

schedule(TimerTask task,long delay)//指定隔多长时间后开始执行Task中的任务代码,delay的单位是毫秒

schedule(TimerTask task,Date time)//指定在什么时间开始执行Task中的任务代码

schedule(TimerTask task,long delay,long period)//指定隔多长时间以后开始定期执行Task中的任务代码,period指定定期执行的时间间隔。

schedule(TimerTask task,Date firstTime,long period)//指定什么时间开始定期执行Task中的任务代码

Timer类实现了Runnable接口,要执行的任务由它里面实现的run方法来完成。(注:run方法中的代码要注意避免长时间循环的代码,避免第一次还没执行完又开始执行第二次了)

实例:

程序运行30秒后启动Windows自带的计算器:

import java.util.*;

public class TestTimer {

public static void main(String[] args)

{

Timer tm=new Timer();

TmTask tmt=new TmTask(tm);

tm.schedule(tmt,2000);//两秒中后执行tm类中的任务代码

//Timer类对象默认是作为非daemon这种线程方式启动的,只要有一个daemon线程存在程序就不会结束,所以即使计算器启动了,但是程序并没有结束

//因为要在tmt对象的run方法中加入停止Timer这个类的线程的代码:Timer.cacel();

System.out.println("程序运行到这里");

}

}

class TmTask extends TimerTask

{

private Timer tm;

public TmTask(Timer tm)

{

this.tm=tm;

}

public void run()

{

try

{

Runtime.getRuntime().exec("calc.exe");//启动Windows自带的计算器

}catch(Exception e)

{

e.printStackTrace();

}

//结束任务线程的代码

//Timer.cancel();//取消Timer类的这个任务线程

//TimerTask.cancel(); //取消TimerTaks.schedule方法中的任务,并不能取消Timer类的这个任务线程

tm.cancel();

}

}

[align=center]-------------------- android培训java培训、期待与您交流!--------------------[/align]
[align=center] 详情请查看:http://edu.csdn.net/heima/[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: