Java日期時間

Java日期時間

Java.util包提供了Date類來封裝當前的日期和時間。Date類提供兩個構造函數來實例化Date對象。java

第一個構造函數使用當前日期和時間來初始化對象。程序員

Date()

第二個構造函數接收一個參數,該參數是從1970年1月1日起的毫秒數。函數

Date(long millisec)

Date對象建立之後,能夠調用下面的方法。  測試


獲取當前日期時間  

Java中獲取當前日期和時間很簡單,使用Date對象的toString()方法來打印當前日期和時間,以下所示:編碼

package pkg2020華南虎;
import java.util.Date;
/**
 *
 * @author yl
 */
public class DateDemo {
    public static void main(String[] args) {
        //初始化Date對象
        Date date=new Date();
        //使用toString()函數顯示日期時間
        System.out.println(date.toString());
    }
}

日期比較

Java使用如下三種方法來比較兩個日期:spa

  • 使用getTime()方法獲取兩個日期(自從1970/01/01經歷的毫秒數值),而後比較這兩個值。
  • 使用方法before(),after()和equals()。例如,一個月的12號比18號早,則new Date(99,2,12).before(new Date(99,2,18))返回值爲true。
  • 使用compareTo()方法,他是由Comparable接口定義的,Date類實現了這個接口。
package pkg2020華南虎;
import java.util.Date;
/**
 *
 * @author yl
 */
public class DateCompare {
    static Date date=new Date();
//    static Date date=new Date();
//    static double a=date.getTime();
    public static void main(String[] args) {
        double  a=date.getTime();
        System.out.println(a);
    }
}
package pkg2020華南虎;

import java.util.Date;

/**
 *
 * @author yl
 */
public class DateCompare02 {

    static Date a = new Date(1999 / 12 / 30);
    static Date b = new Date(1999 / 12 / 20);

    public static void main(String[] args) {
        int c = a.compareTo(b);

        System.out.println(c);
    }
}

 使用SimpleDateFormat格式化日期

使用SimpleDateFormat是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat容許你選擇任何用戶自定義日期時間格式來運行。例如:線程

package pkg2020華南虎;
import java.util.Date;
//import java.util.Scanner;
//import java.util.*;
import java.text.SimpleDateFormat;
/**
 *
 * @author yl
 */
public class DateTest01 {
    public static void main(String[] args) {
        Date dateNow=new Date();
        SimpleDateFormat ft=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println("Now time is:"+ft.format(dateNow));
    }
}

注意:有的格式大寫,有的格式小寫。例如MM是月份,mm是分鐘;HH是24小時制,hh是12小時制。orm


 

日期和時間的格式化編碼

時間模式字符串用來指定時間格式。在此模式中,全部的ASCII字母被保留爲模式字母,定義以下:對象


 

使用printf格式化日期

printf方法能夠很輕鬆地格式化時間和日期。使用兩個字母格式,它以%t開頭而且如下面表格中的一個字母結尾。blog

實例

package pkg2020華南虎;

import java.util.Date;

/**
 *
 * @author yl
 */
public class DateTest02 {

    public static void main(String[] args) {
        Date date = new Date();
        //c的使用
        System.out.printf("所有日期和時間信息:%tc%n", date);
        System.out.printf("年-月-日格式:%tF%n", date);
        System.out.printf("年/月/日格式:%tD%n", date);
        System.out.printf("hh:mm:ss PM格式:%tr%n", date);
        System.out.printf("HH:mm:ss SS格式:%tT%n", date);
        System.out.printf("HH:mm:%tR", date);

    }
}

若是你須要重複提供日期,那麼利用這種方式來格式化它的每一部分就有點 複雜了。所以,能夠利用一個格式化字符串指出要被格式化的參數的索引。

索引必須緊跟在%後面,並且必須以$結束,例如:

package pkg2020華南虎;
import java.util.Date;
/**
 *
 * @author yl
 */
public class DateTest03 {
    public static void main(String[] args) {
        Date date=new Date();
        System.out.printf("%1$s %2$tB %2$td,%2$tY","Due date:",date);
    }
}

或者,你能夠使用<標誌。它代表先前被格式化的參數要被再次使用。例如:

import java.util.Date;
public class DateDemo{
public static void main(String [] args){
Date date =new Date();
System.out.printf("%s %tB %<te,%<tY","Due date:",date);
}
}

 

 

 

定義日期格式的轉換符能夠使日期經過指定的轉換符生成新字符串。這些日期轉換符以下所示:


 

解析字符串爲時間

SimpleDateFormat類有一些附加的方法,特別是parse(),它試圖按照給定的SimpleDateFormat的對象的格式化存儲來解析字符串。例如:

package pkg2020華南虎;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.*;
/**
 *
 * @author yl
 */
public class DateTest04 {

    public static void main(String[] args) {
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
        String input = args.length == 0 ? "1818-11-11" : args[0];//三目運算符、for-each循環
        System.out.print(input + "Parses as");
        Date t;
        try {
            t = ft.parse(input);
            System.out.println(t);
        } catch (ParseException e) {
            System.out.println("Unparseable using " + ft);
        }
    }
}

 


 

Java休眠(sleep)

sleep()使當前線程進入停滯狀態(阻塞當前線程),讓出CPU的使用,目的是不讓當前線程獨自霸佔該進程所得到的cpu資源,以留必定時間給其餘線程執行的機會。

你可讓程序休眠一毫秒的時間或者到你的計算機的壽命長的任意時間。例如,下面的程序會休眠三秒:

package pkg2020華南虎;

import java.util.*;

/**
 *
 * @author yl
 */
public class SleepDemo {

    public static void main(String[] args) {
        try {
            System.out.println(new Date() + "\n");
            Thread.sleep(1000 * 3);//休眠3秒
            System.out.println(new Date() + "\n");
        } catch (Exception e) {
            System.out.println("Got an exception");
        }
    }
}

 


 

測量時間

下面的一個例子代表如何測量時間間隔(以毫秒爲單位):

package pkg2020華南虎;

import java.util.*;

/**
 *
 * @author yl
 */
public class DiffDemo {

    public static void main(String[] args) {
        try {
            long start = System.currentTimeMillis();
            System.out.println(new Date() + "\n");
            Thread.sleep(5 * 60 * 10);
            System.out.println(new Date() + "\n");
            long end = System.currentTimeMillis();
            long diff = end - start;
            System.out.println("Difference is :" + diff);
        } catch (Exception e) {
            System.out.println("Got an exception!");
        }
    }
}

 


 

Calendar類

calendar                       n.日曆;曆法;日程表;一覽表             v.把。。。列入日程表

A.D.      公元、紀年    (Anno「年」 Domini「主」)

B.C.      公元前             Before Christ

農曆                              traditional Chinese calendar;lunar calendar

咱們如今已經可以格式化並建立一個日期對象,可是咱們如何才能設置和獲取日期數據的特定部分,好比說小時,日,或者分鐘?咱們又如何在日期的這些部分加上或者減去值呢?答案是使用Calendar類。

Calendar類的功能要比Date類強大不少,並且在實現方式上也比Date類要複雜一些。

Calendar類是一個抽象類,在實際使用時實現特定的子類的對象,建立對象的過程對程序員來講是透明的,只須要使用getInstance方法建立便可。

建立一個表明系統當前日期的calendar對象

Calendar c=Calendar.getInstace();//默認是當前日期

建立一個指定日期的calendar對象  

Calendar c1 =Calendar.getInstance();
c1.set(2009,6,12);

Calendar類對象字段類型  

Calendar類中用如下這些常量表示不一樣的意義,jdk內的不少類其實都是採用的這種思想。

 

Calendar類對象信息的設置

Set設置

如:

Calendar c1=Calendar.getInstance();

調用

public final void set(int year,int month,int date)
c1.set(2009,6,12);//把Calendar對象c1的年月日分別設爲:200九、六、12

利用字段型設置

若是隻設定某個字段,例如日期的值,則能夠使用以下set方法:

把c1對象表明的日期設置爲10號,其餘全部的數值會被從新計算。

把c1對象表明的年份設置爲2008年,其餘的全部數值會被從新計算。  

 

public void set(int field,int value)

c1.set(Calendar.DATE,10);

c1.set(Calendar.Year,2008);

Add設置

Calendar c1=Calendar.getInstance();

c1.add(Calendar.DATE,10);

c1.add(Calendar.DATE,-10);

把c1對象的日期加上10,也就是c1表示10天后的日期,其餘全部的數值會被從新計算。

把c1對象的日期減去10,也就是c1表示10天前的日期,其餘全部的數值會被從新計算。  

Calendar類對象信息的得到  

Calendar c1=Calendar.getInstance();

int year=c1.get(Calendar.YEAR);

int month=c1.get(Calendar.MONTH)+1;

int date=c1.get(Calendar.DATE);

int hour=c1.get(Calendar.HOUR_OF_DAY);

int minute=c1.get(Calendar.MINUTE);

int second=c1.get(Calendar.SECOND);

int day=c1.get(Calendar.DAY_OF_WEEK);

注意:得到星期幾與Date類是不一樣的:1表明星期日,2表明星期一,3表明星期二,以此類推。  


 

GregorianCalendar類

Calendar類實現了公曆日曆,GregorianCalendar是Calendar類的一個具體實現。

Calendar的getInstance()方法返回一個默認用當前的語言環境和時區初始化的GregorianCalendar對象。GregorianCalendar定義了兩個字段:A.D.(公元)和B.C.(公元前)。這是表明公曆定義的兩個時代。

實例

package pkg2020華南虎;
import java.util.*;
/**
 *
 * @author yl
 */
public class DateTest05 {
    public static void main(String[] args) {
       String months[] = {
      "Jan", "Feb", "Mar", "Apr",
      "May", "Jun", "Jul", "Aug",
      "Sep", "Oct", "Nov", "Dec"};
      
      int year;
      // 初始化 Gregorian 日曆
      // 使用當前時間和日期
      // 默認爲本地時間和時區
      GregorianCalendar gcalendar = new GregorianCalendar();
      // 顯示當前時間和日期的信息
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));
      
      // 測試當前年份是否爲閏年
      if(gcalendar.isLeapYear(year)) {
         System.out.println("當前年份是閏年");
      }
      else {
         System.out.println("當前年份不是閏年");
      }
    }
}
相關文章
相關標籤/搜索