您的位置:首页 > 编程语言 > Java开发

JAVA API系列----日期和时间相关的类

2015-05-12 11:56 141 查看
常用日期、时间相关类:Date、DateFormat和Calendar

·Date()构造方法以当前的时间来初始化Date实例对象,但是Date类没有考虑到国际化的问题,于是出现了DateFormat类和Calendar      类。

·Calendar类:用于完成日期字段(年,月,日,小时,分,秒等)之间的相互操作。

    --Calendar.add方法在某一日期的基础上增加若干时间(年,日,小时,或秒等)得到一个新的日期。

    --Calendar.get方法用于获得日期对象中的字段值(如年月日,时分秒等)。

    --Calendar.set方法用于修改日期对象中日期字段的值。

    --Calendar.getInstance静态方法:Calendar类是一个抽象基类,需要通过Calendar.getInstance方法返回一个Calendar类型的子         类
GregorianCalendar
 的实例对象。

·编程实例:计算出距当前日期时间315天后的日期时间,并用“xx年xx月xx日xx小时:xx分:xx秒”的格式输出。

[java] view
plaincopy

package com.TestCalendar;  

import java.util.Calendar;  

public class TestCalendar{  

    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

        // TODO Auto-generated method stub  

        Calendar cal = Calendar.getInstance();  

        System.out.println("Current time is"+cal.get(Calendar.YEAR)+"年"+(cal.get(cal.MONTH)+1)+"月"+  

                cal.get(cal.DAY_OF_MONTH)+"日"+cal.get(cal.HOUR_OF_DAY)+"时"+cal.get(cal.MINUTE)+"分"+cal.get(cal.SECOND)+"秒");  

        cal.add(Calendar.DAY_OF_YEAR, 2);  

        System.out.println("Current time is"+cal.get(Calendar.YEAR)+"年"+(cal.get(cal.MONTH)+1)+"月"+  

                cal.get(cal.DAY_OF_MONTH)+"日"+cal.get(cal.HOUR_OF_DAY)+"时"+cal.get(cal.MINUTE)+"分"+cal.get(cal.SECOND)+"秒");  

    }  

}  

 

 

 

·Date类

·java.text.DateFormat:可以将Date对象中的日期用指定的格式输出,或者将特定格式的日期字符串转换成Date实例对象。DateFormat    是一个抽象类,在完成具体任务时需要使用它的子类。

·java.text.SimpleDateFormat:是DateFormat的子类,用于把Date对象中的日期格式化为本地字符串,或者把时间字符串转换成Date对  象。

·编程实例:将“2002-03-15”格式的日期字符串转换成'2002年03月15日"的格式。

[java] view
plaincopy

package com.TestCalendar;  

import java.text.ParseException;  

import java.text.SimpleDateFormat;  

import java.util.Date;  

public class TestCalendar{  

    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

        // TODO Auto-generated method stub  

        Date df = null;  

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

        try {  

             df=sdf.parse("2003-03-15");  

        } catch (ParseException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

        sdf.applyPattern("yyyy年MM月dd日");  

        System.out.println(sdf.format(df));  

    }  

}  

 

 

·Timer与TimerTask类

·schedule方法:Timer类的方法,指定多长时间以后启动一个任务线程执行一段代码,或者每个多长时间定期的调用一段代码。

--
void
 
schedule(TimerTask task, long delay):在dalay时间长度之后执行TimerTask类对象中的任务代码。


--
void
 
schedule(TimerTask task, Date time):在time时间开始执行TimerTask中的任务代码。


--
void
 
schedule(TimerTask task, long delay, long period):在delay时间长度之后开始以period为周期执行TimerTask中的任务
         代码。


--
void
 
schedule(TimerTask task, Date firstTime,
long period):
在firstTime时间以period为周期开始执行TimerTask中的任
      务代码。

·TimerTask类实现了Runnable接口,要执行的任务由它里面实现的run方法来完成。要执行周期性的任务,TimerTask中的run方法要避     免执行for循环之类长时间执行的代码,否则就有可能被打断。

·Timer类默认为非Daemon线程,结束时间不确定,要结束它的执行,就要调用Timer类的cancel方法。

.所谓守护线程(Daemon线程)就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程   

2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。  

  虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。 

3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下 

  如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来 

4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon 线程 

  默认产生的线程全部是Non-daemon线程

·编程实例:程序启动运行后30秒启动Windows自带的计算器程序。

[java] view
plaincopy

package com.TestTimer;  

  

import java.io.IOException;  

import java.util.Timer;  

import java.util.TimerTask;  

  

class MyTimerTask extends TimerTask{  

    Timer timer = null;  

    MyTimerTask(Timer timer){//传递Timer对象  

        this.timer = timer;  

    }  

    @Override  

    public void run() {  

        // TODO Auto-generated method stub  

        try {  

            Runtime.getRuntime().exec("calc.exe");  

        } catch (IOException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

        timer.cancel();//调用Timer类的cancel方法,结束timer的运行  

    }  

      

}  

  

public class TestTimer {  

  

    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

        // TODO Auto-generated method stub  

        Timer timer = new Timer();  

        MyTimerTask mtt = new MyTimerTask(timer);  

        timer.schedule(mtt, 3000);//调用mtt的run方法  

    }  

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: