Java 日期時(shí)間

java 日期時(shí)間

java.util 包提供了 date 類來(lái)封裝當(dāng)前的日期和時(shí)間。

java.util 包提供了 calendar 類用來(lái)設(shè)置和獲取日期數(shù)據(jù)的特定部分。

另外,還提供了 simpledateformat 類來(lái)格式化日期的格式。

 

1. date 類

1)date 類的創(chuàng)建

date 類提供兩個(gè)構(gòu)造函數(shù)來(lái)范例化 date 對(duì)象。

第一個(gè)構(gòu)造函數(shù)使用當(dāng)前日期和時(shí)間來(lái)初始化對(duì)象。

date()

第二個(gè)構(gòu)造函數(shù)接收一個(gè)參數(shù),該參數(shù)是從1970年1月1日起的毫秒數(shù)。

date(long millisec)

2)date 類的操作

date對(duì)象創(chuàng)建以后,可以調(diào)用下面的方法。

序號(hào) 方法和描述
1 boolean after(date date)
若當(dāng)調(diào)用此方法的date對(duì)象在指定日期之后返回true,否則返回false。
2 boolean before(date date)
若當(dāng)調(diào)用此方法的date對(duì)象在指定日期之前返回true,否則返回false。
3 object clone( )
返回此對(duì)象的副本。
4 int compareto(date date)
比較當(dāng)調(diào)用此方法的date對(duì)象和指定日期。兩者相等時(shí)候返回0。調(diào)用對(duì)象在指定日期之前則返回負(fù)數(shù)。調(diào)用對(duì)象在指定日期之后則返回正數(shù)。
5 int compareto(object obj)
若obj是date類型則操作等同于compareto(date) 。否則它拋出classcastexception。
6 boolean equals(object date)
當(dāng)調(diào)用此方法的date對(duì)象和指定日期相等時(shí)候返回true,否則返回false。
7 long gettime( )
返回自 1970 年 1 月 1 日 00:00:00 gmt 以來(lái)此 date 對(duì)象表示的毫秒數(shù)。
8 int hashcode( )
 返回此對(duì)象的哈希碼值。
9 void settime(long time)
 
用自1970年1月1日00:00:00 gmt以后time毫秒數(shù)設(shè)置時(shí)間和日期。
10 string tostring( )
把此 date 對(duì)象轉(zhuǎn)換為以下形式的 string: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (sun, mon, tue, wed, thu, fri, sat)。

3)獲取當(dāng)前日期時(shí)間

java中獲取當(dāng)前日期和時(shí)間很簡(jiǎn)單,使用 date 對(duì)象的 tostring() 方法來(lái)打印當(dāng)前日期和時(shí)間:

import java.util.date;
  
public class datedemo {
   public static void main(string args[]) {
       // 初始化 date 對(duì)象
       date date = new date();
        
       // 使用 tostring() 函數(shù)顯示日期時(shí)間
       system.out.println(date.tostring());
   }
}

以上范例編譯運(yùn)行結(jié)果如下:

mon may 04 09:51:52 cdt 2013

4)日期比較

java使用以下三種方法來(lái)比較兩個(gè)日期:

  • 使用 gettime() 方法獲取兩個(gè)日期(自1970年1月1日經(jīng)歷的毫秒數(shù)值),然后比較這兩個(gè)值。
  • 使用方法 before(),after() 和 equals()。例如,一個(gè)月的12號(hào)比18號(hào)早,則 new date(99, 2, 12).before(new date (99, 2, 18)) 返回true。
  • 使用 compareto() 方法,它是由 comparable 接口定義的,date 類實(shí)現(xiàn)了這個(gè)接口。

 

2. simpledateformat 類

simpledateformat 是一個(gè)以語(yǔ)言環(huán)境敏感的方式來(lái)格式化和分析日期的類。simpledateformat 允許你選擇任何用戶自定義日期時(shí)間格式來(lái)運(yùn)行。

1)simpledateformat 類使用案例

import  java.util.*;
import java.text.*;
 
public class datedemo {
   public static void main(string args[]) {
 
      date dnow = new date( );
      simpledateformat ft = new simpledateformat ("yyyy-mm-dd hh:mm:ss");
 
      system.out.println("當(dāng)前時(shí)間為: " + ft.format(dnow));
   }
}

代碼說(shuō)明:

simpledateformat ft = new simpledateformat ("yyyy-mm-dd hh:mm:ss");

這一行代碼確立了轉(zhuǎn)換的格式,其中 yyyy 是完整的公元年,mm 是月份,dd 是日期,hh:mm:ss 是時(shí)、分、秒。

注意:有的格式大寫,有的格式小寫,例如 mm 是月份,mm 是分;hh 是 24 小時(shí)制,而 hh 是 12 小時(shí)制。

以上范例編譯運(yùn)行結(jié)果如下:

當(dāng)前時(shí)間為: 2018-09-06 10:16:34

2)日期和時(shí)間的格式化編碼

時(shí)間模式字符串用來(lái)指定時(shí)間格式。在此模式中,所有的 ascii 字母被保留為模式字母,定義如下:

字母 描述 示例
g 紀(jì)元標(biāo)記 ad
y 四位年份 2001
m 月份 july or 07
d 一個(gè)月的日期 10
h  a.m./p.m. (1~12)格式小時(shí) 12
h 一天中的小時(shí) (0~23) 22
m 分鐘數(shù) 30
s 秒數(shù) 55
s 毫秒數(shù) 234
e 星期幾 tuesday
d 一年中的日子 360
f 一個(gè)月中第幾周的周幾 2 (second wed. in july)
w 一年中第幾周 40
w 一個(gè)月中第幾周 1
a a.m./p.m. 標(biāo)記 pm
k 一天中的小時(shí)(1~24) 24
k  a.m./p.m. (0~11)格式小時(shí) 10
z 時(shí)區(qū) eastern standard time
' 文字定界符 delimiter
" 單引號(hào) `

3)解析字符串為時(shí)間

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

import java.util.*;
import java.text.*;
  
public class datedemo {
 
   public static void main(string args[]) {
      simpledateformat ft = new simpledateformat ("yyyy-mm-dd"); 
 
      string input = args.length == 0 ? "1818-11-11" : args[0]; 
 
      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); 
      }
   }
}

以上范例編譯運(yùn)行結(jié)果如下:

$ 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

 

3. calendar類

我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個(gè)日期對(duì)象了,但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢,比如說(shuō)小時(shí),日,或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用calendar 類。

calendar類的功能要比date類強(qiáng)大很多,而且在實(shí)現(xiàn)方式上也比date類要復(fù)雜一些。

calendar類是一個(gè)抽象類,在實(shí)際使用時(shí)實(shí)現(xiàn)特定的子類的對(duì)象,創(chuàng)建對(duì)象的過(guò)程對(duì)程序員來(lái)說(shuō)是透明的,只需要使用getinstance方法創(chuàng)建即可。

1)創(chuàng)建一個(gè)代表系統(tǒng)當(dāng)前日期的calendar對(duì)象

calendar c = calendar.getinstance();//默認(rèn)是當(dāng)前日期

2)創(chuàng)建一個(gè)指定日期的calendar對(duì)象

使用calendar類代表特定的時(shí)間,需要首先創(chuàng)建一個(gè)calendar的對(duì)象,然后再設(shè)定該對(duì)象中的年月日參數(shù)來(lái)完成。

//創(chuàng)建一個(gè)代表2009年6月12日的calendar對(duì)象
calendar c1 = calendar.getinstance();
c1.set(2009, 6 - 1, 12);

3)calendar類對(duì)象字段類型

calendar類中用以下這些常量表示不同的意義,jdk內(nèi)的很多類其實(shí)都是采用的這種思想

常量描述
calendar.year年份
calendar.month月份
calendar.date日期
calendar.day_of_month日期,和上面的字段意義完全相同
calendar.hour12小時(shí)制的小時(shí)
calendar.hour_of_day24小時(shí)制的小時(shí)
calendar.minute分鐘
calendar.second
calendar.day_of_week星期幾

4)calendar類對(duì)象信息的設(shè)置

set設(shè)置

如:

calendar c1 = calendar.getinstance();

調(diào)用:

public final void set(int year,int month,int date)
c1.set(2009, 6, 12);//把calendar對(duì)象c1的年月日分別設(shè)這為:2009、6、12

利用字段類型設(shè)置

如果只設(shè)定某個(gè)字段,例如日期的值,則可以使用如下set方法:

public void set(int field,int value)

把 c1對(duì)象代表的日期設(shè)置為10號(hào),其它所有的數(shù)值會(huì)被重新計(jì)算

c1.set(calendar.date,10);

把c1對(duì)象代表的年份設(shè)置為2008年,其他的所有數(shù)值會(huì)被重新計(jì)算

c1.set(calendar.year,2008);

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

add設(shè)置

calendar c1 = calendar.getinstance();

把c1對(duì)象的日期加上10,也就是c1也就表示為10天后的日期,其它所有的數(shù)值會(huì)被重新計(jì)算

c1.add(calendar.date, 10);

把c1對(duì)象的日期減去10,也就是c1也就表示為10天前的日期,其它所有的數(shù)值會(huì)被重新計(jì)算

c1.add(calendar.date, -10);

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

5)calendar類對(duì)象信息的獲得

calendar c1 = calendar.getinstance();
// 獲得年份
int year = c1.get(calendar.year);
// 獲得月份
int month = c1.get(calendar.month) + 1;
// 獲得日期
int date = c1.get(calendar.date);
// 獲得小時(shí)
int hour = c1.get(calendar.hour_of_day);
// 獲得分鐘
int minute = c1.get(calendar.minute);
// 獲得秒
int second = c1.get(calendar.second);
// 獲得星期幾(注意(這個(gè)與date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推)
int day = c1.get(calendar.day_of_week);

下一節(jié):java 數(shù)據(jù)結(jié)構(gòu)

java語(yǔ)言 教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频