摘要:轉(zhuǎn)載語(yǔ)言的和類(lèi)語(yǔ)言的日歷日期,和日期格式組成了標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分。值得注意的是我們使用了構(gòu)造函數(shù)創(chuàng)建一個(gè)日期對(duì)象,這個(gè)構(gòu)造函數(shù)沒(méi)有接受任何參數(shù),而這個(gè)構(gòu)造函數(shù)在內(nèi)部使用了方法來(lái)從系統(tǒng)獲取日期。
「轉(zhuǎn)載」Java語(yǔ)言的Calendar和Date類(lèi)
Java 語(yǔ)言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分。日期是商業(yè)邏輯計(jì)算一個(gè)關(guān)鍵的部分。所有的開(kāi)發(fā)者都應(yīng)該能夠計(jì)算未來(lái)的日期,定制日期的顯示格式,并將文本數(shù)據(jù)解析成日期對(duì)象。
創(chuàng)建一個(gè)日期對(duì)象
讓我們看一個(gè)使用系統(tǒng)的當(dāng)前日期和時(shí)間創(chuàng)建一個(gè)日期對(duì)象并返回一個(gè)長(zhǎng)整數(shù)。這個(gè)時(shí)間通常被稱(chēng)為Java 虛擬機(jī)(JVM)主機(jī)環(huán)境的系統(tǒng)時(shí)間。
import java.util.Date;
public class DateExample1 {
public static void main(String[] args) {
// Get the system date/time
Date date = new Date();
System.out.println(date.getTime());
} }
在星期六,2001年9月29日,下午大約是6:50的樣子,上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710。值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個(gè)日期對(duì)象,這個(gè)構(gòu)造函數(shù)沒(méi)有接受任何參數(shù),而這個(gè)構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來(lái)從系統(tǒng)獲取日期。現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開(kāi)始經(jīng)歷的毫秒數(shù)了。我們?nèi)绾尾拍芤砸环N用戶(hù)明白的格式來(lái)顯示這個(gè)日期呢? 在這里類(lèi)java.text.SimpleDateFormat 和它的抽象基類(lèi) java.text.DateFormat 就派得上用場(chǎng)了。
日期數(shù)據(jù)的定制格式
假如我們希望定制日期數(shù)據(jù)的格式,比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個(gè)工作:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample2 {
public static void main(String[] args) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
} }
只要通過(guò)向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy",我們就能夠指明自己想要的格式。格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個(gè)部分。EEEE是星期,MMMM是月,dd是日,yyyy是年。字符的個(gè)數(shù)決定了日期是如何格式化的。傳遞"EE-MM-dd-yy"會(huì)顯示 Sat-09-29-01。
將文本數(shù)據(jù)解析成日期對(duì)象
假設(shè)我們有一個(gè)文本字符串包含了一個(gè)格式化了的日期對(duì)象,我們希望解析這個(gè)字符串并從文本日期數(shù)據(jù)創(chuàng)建一個(gè)日期對(duì)象。我們將再次以格式化字符串"MM-dd-yyyy" 調(diào)用SimpleDateFormat類(lèi)。但是這一次,我們使用格式化解析而不是生成一個(gè)文本日期數(shù)據(jù)。我們的例子,顯示在下面,將解析文本字符串"9-29-2001"并創(chuàng)建一個(gè)值為001736000000 的日期對(duì)象。
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample3 {
public static void main(String[] args) {
// Create a date formatter that can parse dates of
// the form MM-dd-yyyy.
SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
// Create a string containing a text date to be parsed.
String dateStringToParse = "9-29-2001";
try {
// Parse the text version of the date.
// We have to perform the parse method in a
// try-catch construct in case dateStringToParse
// does not contain a date in the format we are expecting.
Date date = bartDateFormat.parse(dateStringToParse);
// Now send the parsed date as a long value
// to the system output.
System.out.println(date.getTime());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
} }
使用標(biāo)準(zhǔn)的日期格式化過(guò)程
既然我們已經(jīng)可以生成和解析定制的日期格式了,讓我們來(lái)看一看如何使用內(nèi)建的格式化過(guò)程。方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標(biāo)準(zhǔn)的日期格式化過(guò)程。下面是我們獲取了四個(gè)內(nèi)建的日期格式化過(guò)程。它們包括一個(gè)短的,中等的,長(zhǎng)的,和完整的日期格式。
import java.text.DateFormat;
import java.util.Date;
public class DateExample4 {
public static void main(String[] args) {
Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT);
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM);
DateFormat longDateFormat = DateFormat.getDateTimeInstance(
DateFormat.LONG, DateFormat.LONG);
DateFormat fullDateFormat = DateFormat.getDateTimeInstance(
DateFormat.FULL, DateFormat.FULL);
System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
}
注意我們?cè)趯?duì) getDateTimeInstance的每次調(diào)用中都傳遞了兩個(gè)值:第一個(gè)參數(shù)是日期風(fēng)格,而第二個(gè)參數(shù)是時(shí)間風(fēng)格。它們都是基本數(shù)據(jù)類(lèi)型int(整型)。考慮到可讀性,我們使用了DateFormat 類(lèi)提供的常量: SHORT,MEDIUM,LONG,和 FULL。
運(yùn)行我們的例子程序的時(shí)候,它將向標(biāo)準(zhǔn)輸出設(shè)備輸出下面的內(nèi)容:
9/29/01 8:44 PM
Sep 29,2001 8:44:45 PM
September 29,2001 8:44:45 PM EDT
Saturday,September 29,2001 8:44:45 PM EDT
Calendar 類(lèi)
我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個(gè)日期對(duì)象了,但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢,比如說(shuō)小時(shí),日,或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類(lèi)。
假設(shè)你想要設(shè)置,獲取,和操縱一個(gè)日期對(duì)象的各個(gè)部分,比方一個(gè)月的一天或者是一個(gè)星期的一天,為了演示這個(gè)過(guò)程,我們將使用具體的子類(lèi) java.util.GregorianCalendar。 考慮下面的例子,它計(jì)算得到下面的第十個(gè)星期五是13號(hào)。
import java.util.GregorianCalendar;
import java.util.Date;
import java.text.DateFormat;
public class DateExample5 {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
// Create our Gregorian Calendar.
GregorianCalendar cal = new GregorianCalendar();
// Set the date and time of our calendar
// to the system′s date and time
cal.setTime(new Date());
System.out.println("System Date: " + dateFormat.format(cal.getTime()));
// Set the day of week to FRIDAY
cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
System.out.println("After Setting Day of Week to Friday: " +dateFormat.format(cal.getTime()));
int friday13Counter = 0;
while (friday13Counter <= 10) {
// Go to the next Friday by adding 7 days.
cal.add(GregorianCalendar.DAY_OF_MONTH,7);
// If the day of month is 13 we have
// another Friday the 13th.
if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) { friday13Counter++;
System.out.println(dateFormat.format(cal.getTime()));
}
}
}
}
在這個(gè)例子中我們作了有趣的函數(shù)調(diào)用:
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
和:cal.add(GregorianCalendar.DAY_OF_MONTH,7);
set 方法能夠讓我們通過(guò)簡(jiǎn)單的設(shè)置星期中的哪一天這個(gè)域來(lái)將我們的時(shí)間調(diào)整為星期五。注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來(lái)增強(qiáng)代碼的可讀性。add 方法讓我們能夠在日期上加上數(shù)值,潤(rùn)年的所有復(fù)雜的計(jì)算都由這個(gè)方法自動(dòng)處理。
我們這個(gè)例子的輸出結(jié)果是:
System Date: Saturday,September 29,2001
當(dāng)我們將它設(shè)置成星期五以后就成了:
Friday,September 28,2001
Friday,September 13,2002
Friday,December 13,2002
Friday,June 13,2003
Friday,F(xiàn)ebruary 13,2004
Friday,August 13,2004
Friday,May 13,2005
Friday,January 13,2006
Friday,October 13,2006
Friday,April 13,2007
Friday,July 13,2007
Friday,June 13,2008
時(shí)間掌握在你的手里
有了這些Date 和Calendar 類(lèi)的例子,你應(yīng)該能夠使用 java.util.Date,java.text.SimpleDateFormat,和 java.util.GregorianCalendar 創(chuàng)建許多方法了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64172.html
摘要:類(lèi)是日期時(shí)間格式化子類(lèi)的抽象類(lèi),我們通過(guò)這個(gè)類(lèi)可以幫我們完成日期和文本之間的轉(zhuǎn)換也就是可以在對(duì)象與對(duì)象之間進(jìn)行來(lái)回轉(zhuǎn)換。構(gòu)造方法由于為抽象類(lèi),不能直接使用,所以需要常用的子類(lèi)。 day01【Object類(lèi)、常用API】 主要內(nèi)容 Object類(lèi) Date類(lèi) DateFormat類(lèi) Calendar類(lèi) System類(lèi) StringBuilder類(lèi) 包裝類(lèi) 教學(xué)目標(biāo) -[ ] 能夠說(shuō)出...
摘要:類(lèi)是一個(gè)抽象類(lèi),它為特定瞬間與一組諸如等日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段例如獲得下星期的日期提供了一些方法。是不變的日期時(shí)間對(duì)象代表一個(gè)日期時(shí)間,往往被視為年月日時(shí)分秒。獲得實(shí)例的日期和時(shí)間。 時(shí)區(qū) GMT(Greenwich Mean Time):格林尼治時(shí)間,格林尼治標(biāo)準(zhǔn)時(shí)間的正午是指當(dāng)太陽(yáng)橫穿格林尼治子午線(xiàn)時(shí)(也就是在格林尼治上空最高點(diǎn)時(shí))的時(shí)間。 UTC(U...
摘要:基礎(chǔ)知識(shí)之日期操作簡(jiǎn)介中的時(shí)間使用標(biāo)準(zhǔn)類(lèi)庫(kù)的其表示特定的瞬間,精確到毫秒。常用的方法實(shí)例化對(duì)象簡(jiǎn)介是一個(gè)以與語(yǔ)言環(huán)境有關(guān)的方式來(lái)格式化和解析日期的具體類(lèi)。它允許進(jìn)行格式化日期文本解析文本日期和規(guī)范化。 Java基礎(chǔ)知識(shí)之日期操作 1. Date 簡(jiǎn)介 Java中的時(shí)間使用標(biāo)準(zhǔn)類(lèi)庫(kù)的java.util.Date,其表示特定的瞬間,精確到毫秒。 是用距離一個(gè)固定時(shí)間點(diǎn)的毫秒數(shù)(可正可負(fù),l...
摘要:用的時(shí)候再轉(zhuǎn)化成年月日時(shí)分秒。創(chuàng)建日期對(duì)象代表當(dāng)前時(shí)間從年月日早上點(diǎn)分秒開(kāi)始經(jīng)歷了毫秒也就是秒的時(shí)間獲取一個(gè)時(shí)間的毫秒數(shù),返回一個(gè)型的整數(shù)。 時(shí)間原點(diǎn)概念 計(jì)算機(jī)語(yǔ)言中的時(shí)間原點(diǎn)都是從1970年1月1日8點(diǎn)0分0秒開(kāi)始算的,就相當(dāng)于時(shí)間的0。為什么對(duì)應(yīng)1970年呢?其實(shí),現(xiàn)在大部分計(jì)算機(jī)系統(tǒng)使用的時(shí)間都是UNIX時(shí)間,而UNIX或類(lèi)UNIX系統(tǒng)使用的時(shí)間表示方式是:從協(xié)調(diào)世界時(shí)1970...
摘要:正則表達(dá)式的概述和簡(jiǎn)單使用正則表達(dá)式是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串的單個(gè)字符串。例如,在表達(dá)式中,存在四個(gè)這樣的組組零始終代表整個(gè)表達(dá)式。 1_正則表達(dá)式的概述和簡(jiǎn)單使用 A:正則表達(dá)式 是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串的單個(gè)字符串。其實(shí)就是一種規(guī)則。有自己特殊的應(yīng)用。 作用:比如注冊(cè)郵箱,郵箱有用戶(hù)名和密碼,一般會(huì)對(duì)其限制長(zhǎng)度,這個(gè)...
閱讀 626·2021-10-08 10:20
閱讀 1513·2021-09-23 11:22
閱讀 3245·2019-08-30 15:55
閱讀 1673·2019-08-28 18:25
閱讀 1895·2019-08-28 18:14
閱讀 1264·2019-08-26 11:37
閱讀 2927·2019-08-26 10:18
閱讀 2450·2019-08-23 18:39