1. 程式人生 > >20180715-Java日期時間

20180715-Java日期時間

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

Sun Jul 15 06:40:03 UTC 2018

 


import java.util.*;
import java.text.*;
public class DateDemo3{
public static void main(String[] args){
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date:" + ft.format(dNow));
}
}


Current Date:Sun 2018.07.15 at 06:56:23 AM UTC

 

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.println(str);
}
}

Current Date/Time : Sun Jul 15 07:10:14 UTC 2018


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: July 15, 2018

 


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 2:",date);
}
}


Due date 2: July 15,2018

 

 

 

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

public class DateDemo{
public static void main(String[] args){
SimpleDateFormat fr = 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);
}
}
}


import java.util.*;
import java.text.*;
public class DateDemo{
public static void main(String[] args){
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(args.length);
String input = args.length ==0? "1818-11-11": args[0];
System.out.println(input + "Parses as "+ft);
Date t;

try{
t = ft.parse(input);
System.out.println(t);
}catch(ParseException e){
System.out.println("Unparseable using" +ft);
}
}
}


0
1818-11-11Parses as [email protected]
Wed Nov 11 00:00:00 UTC 1818

 


import java.util.*;
public class SleeepDemo{
public static void main(String[] args){
try{
System.out.println(new Date() + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date() + "\n");
}catch(Exception e){
System.out.println("Got an exception!");
}
}
}

Sun Jul 15 07:56:32 UTC 2018

Sun Jul 15 07:56:35 UTC 2018

 


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

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 Jul 15 08:06:31 UTC 2018

Sun Jul 15 08:06:36 UTC 2018

Difference is :5019


Calendar類物件資訊的獲得

 

Calendar c1 = Calendar.getInstance();
//獲得年份
int year = c1.get(Calendar.YEAR);
//獲得月份
int month = c1.get(Calendar.YEAR);
//獲得日期
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);

 


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:Jul 15 2018
Time: 9:44:26
當前年份不是閏年



Java日期時間
java.util包提供了Date類來封裝當前的日期和時間。 Date類提供兩個建構函式來例項化Date物件。
第一個建構函式使用當前日期和時間來初始化物件。
Date()
第二個建構函式接收一個引數,該引數是從1970年1月1日起的微秒數。
Date(long millisec)

Date物件建立以後,可以呼叫下面的方法。

序號 方法 描述
1 boolean after(Date date) 若當呼叫此方法的Date物件在指定日期之後返回true,否則返回false。
2 boolean before(Date date) 若當呼叫此方法的Date物件在指定日期之前返回true,否則返回false。
3 Object clone() 返回此物件的副本。
4 int compareTo(Date date) 比較當呼叫此方法的Date物件和指定日期。兩者相等時候返回0。呼叫物件在指定日期之前則返回負數。呼叫物件在指定日期之後則返回正數。
5 int compareTo(Object obj) 若obj是Date型別則操作等同於compareTo(Date) 。否則它丟擲ClassCastException。
6 boolean equals(Object date) 當呼叫此方法的Date物件和指定日期相等時候返回true,否則返回false。
7 long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 物件表示的毫秒數。
8 int hashCode() 返回此物件的雜湊碼值。
9 void setTime(long time) 用自1970年1月1日00:00:00 GMT以後time毫秒數設定時間和日期。
10 String toString() 轉換Date物件為String表示形式,並返回該字串。

獲取當前日期時間
Java中獲取當前日期和時間很簡單,使用Date物件的 toString()方法來列印當前日期和時間

日期比較
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允許你選擇任何使用者自定義日期時間格式來執行。

簡單的DateFormat格式化編碼
時間模式字串用來指定時間格式。在此模式中,所有的ASCII字母被保留為模式字母

字母 描述 示例
G 紀元標記 AD
y 四位年份 2001
M 月份 July or 07
d 一個月的日期 10
h A.M./P.M. (1~12)格式小時 12
H 一天中的小時 (0~23) 22
m 分鐘數 30
s 秒數 55
S 微妙數 234
E 星期幾 Tuesday
D 一年中的日子 360
F 一個月中第幾周的周幾 2 (second Wed. in July)
w 一年中第幾周 40
W 一個月中第幾周的周幾 1
a A.M./P.M. 標記 PM
k 一天中的小時(1~24) 24
K A.M./P.M. (0~11)格式小時 10
z 時區 Eastern Standard Time
文字定界符 Delimiter
" 單引號

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

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

可以使用<標誌。它表明先前被格式化的引數要被再次使用

日期和時間轉換字元

參考Java標準文件。


解析字串為時間
SimpleDateFormat 類有一些附加的方法,特別是parse(),它試圖按照給定的SimpleDateFormat 物件的格式化儲存來解析字串。

Java 休眠(sleep)
你可以讓程式休眠一毫秒的時間或者到您的計算機的壽命長的任意段時間


測量時間

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.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的欄位意義完全相同
Calendar.HOUR 12小時制的小時
Calendar.HOUR_OF_DAY 24小時制的小時
Calendar.MINUTE 分鐘
Calendar.SECOND 秒
Calendar.DAY_OF_WEEK 星期幾

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);

Add設定
Calendar c1 = Calendar.getInstance();
把c1物件的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, 10);
把c1物件的日期加上負10,也就是c1所表的日期的10天前的日期,其它所有的數值會被重新計算
<pre>c1.add(Calendar.DATE, -10);

Calendar類物件資訊的獲得

GregorianCalendar類
Calendar類實現了公曆日曆,GregorianCalendar是Calendar類的一個具體實現。
Calendar 的getInstance()方法返回一個預設用當前的語言環境和時區初始化的GregorianCalendar物件。
GregorianCalendar定義了兩個欄位:AD和BC。這些代表公曆定義的兩個時代。

下面列出GregorianCalendar物件的幾個構造方法:
建構函式和說明
"GregorianCalendar()
在具有預設語言環境的預設時區內使用當前時間構造一個預設的 GregorianCalendar。"
GregorianCalendar(int year, int month, int date) 在具有預設語言環境的預設時區內構造一個帶有給定日期設定的 GregorianCalendar
" GregorianCalendar(int year, int month, int date, int hour, int minute)
為具有預設語言環境的預設時區構造一個具有給定日期和時間設定的 GregorianCalendar。"
"GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
為具有預設語言環境的預設時區構造一個具有給定日期和時間設定的 GregorianCalendar。"
"GregorianCalendar(Locale aLocale)
在具有給定語言環境的預設時區內構造一個基於當前時間的 GregorianCalendar。"
"GregorianCalendar(TimeZone zone)
在具有預設語言環境的給定時區內構造一個基於當前時間的 GregorianCalendar。"
"GregorianCalendar(TimeZone zone, Locale aLocale)
在具有給定語言環境的給定時區內構造一個基於當前時間的 GregorianCalendar。"

GregorianCalendar 類提供的一些有用的方法列表:
方法和說明
1 " void add(int field, int amount)
根據日曆規則,將指定的(有符號的)時間量新增到給定的日曆欄位中。"
2 "protected void computeFields()
轉換UTC毫秒值為時間域值"
3 protected void computeTime() 覆蓋Calendar ,轉換時間域值為UTC毫秒值
4 boolean equals(Object obj) 比較此 GregorianCalendar 與指定的 Object。
5 int get(int field) 獲取指定欄位的時間值
6 int getActualMaximum(int field) 返回當前日期,給定欄位的最大值
7 int getActualMinimum(int field) 返回當前日期,給定欄位的最小值
8 int getGreatestMinimum(int field) 返回此 GregorianCalendar 例項給定日曆欄位的最高的最小值。
9 Date getGregorianChange() 獲得格里高利曆的更改日期。
10 int getLeastMaximum(int field) 返回此 GregorianCalendar 例項給定日曆欄位的最低的最大值
11 int getMaximum(int field) 返回此 GregorianCalendar 例項的給定日曆欄位的最大值。
12 Date getTime()獲取日曆當前時間。
13 long getTimeInMillis() 獲取用長整型表示的日曆的當前時間
14 TimeZone getTimeZone() 獲取時區。
15 int getMinimum(int field) 返回給定欄位的最小值。
16 int hashCode() 重寫hashCode.
17 boolean isLeapYear(int year) 確定給定的年份是否為閏年。
18 void roll(int field, boolean up) 在給定的時間欄位上新增或減去(上/下)單個時間單元,不更改更大的欄位。
19 void set(int field, int value) 用給定的值設定時間欄位。
20 void set(int year, int month, int date) 設定年、月、日的值。
21 void set(int year, int month, int date, int hour, int minute) 設定年、月、日、小時、分鐘的值。
22 void set(int year, int month, int date, int hour, int minute, int second) 設定年、月、日、小時、分鐘、秒的值。
23 void setGregorianChange(Date date) 設定 GregorianCalendar 的更改日期。
24 void setTime(Date date) 用給定的日期設定Calendar的當前時間。
25 void setTimeInMillis(long millis) 用給定的long型毫秒數設定Calendar的當前時間。
26 void setTimeZone(TimeZone value) 用給定時區值設定當前時區。
27 String toString() 返回代表日曆的字串。

備註:隨筆中內容來源於網上資料整理,僅供參考。