十七、300份Java零基礎教學筆記,真正的從零開始(關注持續更新)

Java快速入門(本文篇幅較長,建議點喜歡後收藏後閱讀)
每天學會一個知識點,覺得不錯的可以留言關注下,戳我主頁獲取Java資料(工具包,面試資料,視頻教學,包含社羣解答)

Java 日期時間

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

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

Date( )

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

Date(long millisec)

Date對象創建以後,可以調用下面的方法。


獲取當前日期時間

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

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

以上實例編譯運行結果如下:

Mon May 04 09:51:52 CDT 2013

日期比較

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

  • 使用getTime( ) 方法獲取兩個日期(自1970年1月1日經歷的微妙數值),然後比較這兩個值。
  • 使用方法before(),after()和equals()。例如,一個月的12號比18號早,則new Date(99, 2, 12).before(new Date (99, 2, 18))返回true。
  • 使用compareTo()方法,它是由Comparable接口定義的,Date類實現了這個接口。

使用SimpleDateFormat格式化日期

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

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {

      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}

以上實例編譯運行結果如下:

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

簡單的DateFormat格式化編碼

時間模式字符串用來指定時間格式。在此模式中,所有的ASCII字母被保留爲模式字母,定義如下:

使用printf格式化日期

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

import java.util.Date;

public class DateDemo {

  public static void main(String args[]) {
     // 初始化 Date 對象
     Date date = new Date();

     // 使用toString()顯示日期和時間
     String str = String.format("Current Date/Time : %tc", date );

     System.out.printf(str);
  }
}

以上實例編譯運行結果如下:

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

如果你需要重複提供日期,那麼利用這種方式來格式化它的每一部分就有點複雜了。因此,可以利用一個格式化字符串指出要被格式化的參數的索引。
索引必須緊跟在%後面,而且必須以$結束。例如:

import java.util.Date;
  
public class DateDemo {

   public static void main(String args[]) {
       // 初始化 Date 對象
       Date date = new Date();
        
       // 使用toString()顯示日期和時間
       System.out.printf("%1$s %2$tB %2$td, %2$tY", 
                         "Due date:", date);
   }
}

以上實例編譯運行結果如下:

Due date: February 09, 2004

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

import java.util.Date;
  
public class DateDemo {

   public static void main(String args[]) {
       // 初始化 Date 對象
       Date date = new Date();
        
       // 顯示格式化時間
       System.out.printf("%s %tB %<te, %<tY", 
                         "Due date:", date);
   }
}

以上實例編譯運行結果如下:

Due date: February 09, 2004

日期和時間轉換字符

還有其他有用的日期和時間相關的類。對於更多的細節,你可以參考到Java標準文檔。

解析字符串爲時間

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

以上實例編譯運行結果如下:

$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Java 休眠(sleep)

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

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

import java.util.*;
  
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!"); 
      }
   }
}

以上實例編譯運行結果如下:

Thu Sep 17 10:20:30 CST 2015

Thu Sep 17 10:20:33 CST 2015

測量時間

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

import java.util.*;
  
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!");
      }
   }
}

以上實例編譯運行結果如下:

Sun May 03 18:16:51 GMT 2009

Sun May 03 18:16:57 GMT 2009

Difference is : 5993

Calendar類

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

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

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

創建一個代表系統當前日期的Calendar對象

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

創建一個指定日期的Calendar對象
使用Calendar類代表特定的時間,需要首先創建一個Calendar的對象,然後再設定該對象中的年月日參數來完成。

//創建一個代表2009年6月12日的Calendar對象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Calendar類對象字段類型

Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是採用的這種思想

Calendar類對象信息的設置

Set設置
如:

Calendar c1 = Calendar.getInstance();

調用:

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

利用字段類型設置
如果只設定某個字段,例如日期的值,則可以使用如下set方法:

public void set(int field,int value)

把 c1對象代表的日期設置爲10號,其它所有的數值會被重新計算

c1.set(Calendar.DATE,10);

把c1對象代表的年份設置爲2008年,其他的所有數值會被重新計算

c1.set(Calendar.YEAR,2008);

其他字段屬性set的意義以此類推

Add設置

Calendar c1 = Calendar.getInstance();

把c1對象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的數值會被重新計算

c1.add(Calendar.DATE, 10);

把c1對象的日期加上10,也就是c1所表的日期的10天前的日期,其它所有的數值會被重新計算

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

其他字段屬性的add的意義以此類推

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);
// 獲得星期幾(注意(這個與Date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推)
int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar類

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

Calendar 的getInstance()方法返回一個默認用當前的語言環境和時區初始化的GregorianCalendar對象。GregorianCalendar定義了兩個字段:AD和BC。這些代表公曆定義的兩個時代。

下面列出GregorianCalendar對象的幾個構造方法:


這裏是GregorianCalendar 類提供的一些有用的方法列表:
實例

import java.util.*;
  
public class GregorianCalendarDemo {

   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("當前年份不是閏年");
      }
   }
}

以上實例編譯運行結果如下:

Date: Apr 22 2009
Time: 11:25:27
當前年份不是閏年

關於 Calender 類的完整列表,你可以參考標準的Java文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章