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
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容許你選擇任何用戶自定義日期時間格式來運行。例如:線程
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方法能夠很輕鬆地格式化時間和日期。使用兩個字母格式,它以%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); } } }
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 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 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表明星期二,以此類推。
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("當前年份不是閏年"); } } }