java中Calendar日期對象

來源:互聯網
上載者:User

標籤:static   顯示日期   結束時間   解釋   example   開發人員   資料類型   img   max   


轉帖網上簡介
Calendar c = Calendar.getInstance();//建立執行個體 預設是當前時刻

  c.get(Calendar.YEAR);

  c.get(Calendar.MONTH);

  c.get(Calendar.DATE);//擷取年,月,日 當然時分秒也可以 注意這裡的月份比較特殊 從0開始

  c.get(Calendar.DAY_OF_WEEK);//擷取當前日期在星期中的第幾天 從1-7對應 日-六

  c.getActualMaximum(Calendar.DAY_OF_MONTH);//擷取當月中天數的最大值 即當月的日期數
  c.get(Calendar.DAY_OF_MONTH);//當前天數所在月份的第幾天

  c.set(2011, 10, 13);//指定一個日期

  int nowDay = c.get(Calendar.DAY_OF_MONTH);

  c.set(Calendar.DATE, nowDay+3);//3天后的日期

    c.add(Calendar.DATE, X);//去指定天數的時期,取過去天的日期用負數,取未來天數日期用正數,在"X"處天下 如 c.add(Calendar.DATE, -1)去當前日期前一天的日期
    c.getTime()

*********************************************************************************轉帖
java中關於時間日期操作的常用函數
1.計算某一月份的最大天數
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar對象預設一月為0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
註:在使用set方法之前,必須先clear一下,否則很多資訊會繼承自系統目前時間
2.Calendar和Date的轉化
(1) Calendar轉化為Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date轉化為Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化輸出日期時間
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
4.計算一年中的第幾星期
(1)計算某一天是一年中的第幾星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)計算一年中的第幾星期是幾號
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
輸出:
2006-01-02
5.add()和roll()的用法
(1)add()方法
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
輸出:
2006-08-30
2006-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
輸出:
2006-09-29
2006-09-03
可見,roll()方法在本月內迴圈,一般使用add()方法;
6.計算兩個任意時間中間的間隔天數
(1)傳進Calendar對象

/** *//**計算兩個時間之間相隔天數
* @param startday 開始時間
* @param endday 結束時間
* @return
*/
public int getIntervalDays(Calendar startday,Calendar endday)...{
//確保startday在endday之前
if(startday.after(endday))...{
Calendar cal=startday;
startday=endday;
endday=cal;
}
//分別得到兩個時間的毫秒數
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();

long ei=el-sl;
//根據毫秒數計算間隔天數
return (int)(ei/(1000*60*60*24));
}

(2)傳進Date對象
/** *//**計算兩個時間之間相隔天數
* @param startday 開始時間
* @param endday 結束時間
* @return
*/
public int getIntervalDays(Date startday,Date endday)...{
//確保startday在endday之前
if(startday.after(endday))...{
Date cal=startday;
startday=endday;
endday=cal;
}
//分別得到兩個時間的毫秒數
long sl=startday.getTime();
long el=endday.getTime();

long ei=el-sl;
//根據毫秒數計算間隔天數
return (int)(ei/(1000*60*60*24));
}同理,可以用相同的方法計算出任意兩個時間相隔的小時數,分鐘數,秒鐘數等
註:以上方法是完全按時間計算,有時並不能令人滿意,如:
startday="2006-10-11 20:00:00"
endday="2006-10-12 8:00:00"
計算結果為0,但是我們也許相讓計算結果變為1,此時可以用如下方法實現:
在傳參之前,先設定endday的時間,如:
endday.set(Calendar.HOUR_OF_DAY, 23);
endday.set(Calendar.MINUTE, 59);
endday.set(Calendar.SECOND, 59);
endday.set(Calendar.MILLISECOND, 59);
這樣再傳進去startday,endday,則結果就如我們所願了。不過,如果嫌以上方法麻煩,可以參考以下方法:
(3)改進精確計算相隔天數的方法
public int getDaysBetween (Calendar d1, Calendar d2) ...{
if (d1.after(d2)) ...{ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) ...{
d1 = (Calendar) d1.clone();
do ...{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
2007-04-24 14:34 作者: JAVA-HE  
re: JAVA 一句話技巧(不斷補充中)
JAVA中日期格式化 分類:java 基礎時間格式化
一、JAVA中日期的擷取、設定和格式化
1)JAVA提供了3個日期類:Date、Calendar和DateFormat。
Date()方法主要用於建立日期對象並擷取日期;
Calendar()方法主要用於擷取和設定日期;
DateFormat()方法主要用於建立日期格式化器,然後再由格式化器將日期轉換為各種日期格式串輸出。
2)JAVA語言規定的基準日期為格林尼治標準時間1970.1.1.00:00:00,當前日期是由基準日期開始所經曆的毫秒數轉換出來的。
3)DateFomat類在java.text包中,Date和Calendar類在java.util包中。
4)執行個體如下:
import java.util.*;
import java.text.*;

public class DisplayDate {
public static void main(String[] args){
Date today;
Calendar now;
DateFormat f1,f2;
String s1,s2;

System.out.println("\n顯示Date類的相關用法");

today = new Date();
System.out.println("new Date()= \t"+ today);

System.out.println("\n用DateFormat類顯示各種日期格式");

//顯示各種日期格式
f1 = DateFormat.getDateInstance();
s1 = f1.format(today);
System.out.println("DateFormat.getDateInstance()= \t"+s1);

f1 = DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= \t"+ s1);

f1 = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+ s1);

f1 = DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= \t" + s1);

System.out.println("\n用DateFormat類顯示各種時間格式");

//顯示各種時間格式
f1 = DateFormat.getTimeInstance();
s1 = f1.format(today);
System.out.println("DateFormat.getTimeInstance()= \t"+s1);

f1 = DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= \t"+s1);

f1 = DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+s1);

f1 = DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
s1 = f1.format(today);
System.out.println("DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= \t"+s1);

System.out.println("\n顯示Calendar的相關時間用法");

now = Calendar.getInstance();
today = now.getTime();
System.out.println("Calendar.getInstance().getTime()= \t"+ today.toString());

}
}

程式運行結果顯示如下:

顯示Date類的相關用法
new Date()= Fri May 02 13:29:32 CST 2003

用DateFormat類顯示各種日期格式
DateFormat.getDateInstance()= 2003-5-2
DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= 2003年5月2日
DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= 2003-5-2
DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= 03-5-2

用DateFormat類顯示各種時間格式
DateFormat.getTimeInstance()= 13:29:32
DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= 下午01時29分32秒
DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= 13:29:32
DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= 下午1:29

顯示Calendar的相關時間用法
Calendar.getInstance().getTime()= Fri May 02 13:29:33 CST 2003

*********************************************************************************轉帖
Java 語言的Calendar(日曆),Date(日期), 和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分. 日期是商業邏輯計算一個關鍵的部分. 所有的開發人員都應該能夠計算未來的日期, 定製日期的顯示格式, 並將文本資料解析成日期對象. 我們寫了兩篇文章, 這是第一篇, 我們將大概的學習日期, 日期格式, 日期的解析和日期的計算.


我們將討論下面的類:

1、具體類(和抽象類別相對)java.util.Date
2、抽象類別java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat
3、抽象類別java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar

具體類可以被執行個體化, 但是抽象類別卻不能. 你首先必須實現抽象類別的一個具體子類.

Date 類從Java 開發包(JDK) 1.0 就開始進化, 當時它只包含了幾個取得或者設定一個日期資料的各個部分的方法, 比如說月, 日, 和年. 這些方法現在遭到了批評並且已經被轉移到了Calendar類裡去了, 我們將在本文中進一步討論它. 這種改進旨在更好的處理日期資料的國際化格式. 就象在JDK 1.1中一樣, Date 類實際上只是一個包裹類, 它包含的是一個長整型資料, 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之後經曆的毫秒數.


一、建立一個日期對象

讓我們看一個使用系統的當前日期和時間建立一個日期對象並返回一個長整數的簡單例子. 這個時間通常被稱為JAVA 虛擬機器(JVM)主機環境的系統時間.
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的樣子, 上面的例子在系統輸出裝置上顯示的結果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 建構函式建立一個日期對象, 這個建構函式沒有接受任何參數. 而這個建構函式在內部使用了System.currentTimeMillis() 方法來從系統擷取日期.

那麼, 現在我們已經知道了如何擷取從1970年1月1日開始經曆的毫秒數了. 我們如何才能以一種使用者明白的格式來顯示這個日期呢? 在這裡類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了.


二、日期資料的定製格式

假如我們希望定製日期資料的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個工作:

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

只要通過向SimpleDateFormat 的建構函式傳遞格式字串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應該可以看見, 格式字串中的ASCII 字元告訴格式化函數下面顯示日期資料的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字元的個數決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01. 請察看Sun 公司的Web 網站擷取日期格式化選項的完整的指示.


三、將文本資料解析成日期對象

假設我們有一個文本字串包含了一個格式化了的日期對象, 而我們希望解析這個字串並從文本日期資料建立一個日期對象. 我們將再次以格式化字串"MM-dd-yyyy" 調用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是產生一個文本日期資料. 我們的例子, 顯示在下面, 將解析文本字串"9-29-2001"並建立一個值為001736000000 的日期對象.

例子程式:

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


五、使用標準的日期格式化過程

既然我們已經可以產生和解析定製的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們擷取了四個內建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.

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



注意我們在對 getDateTimeInstance的每次調用中都傳遞了兩個值. 第一個參數是日期風格, 而第二個參數是時間風格. 它們都是基礎資料型別 (Elementary Data Type)int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道擷取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司Web 網站上的解釋.

運行我們的例子程式的時候, 它將向標準輸出裝置輸出下面的內容:
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 類

我們現在已經能夠格式化並建立一個日期對象了, 但是我們如何才能設定和擷取日期資料的特定部分呢, 比如說小時, 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類. 就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法.

假設你想要設定, 擷取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 為了示範這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號.

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



在這個例子中我們作了有趣的函數調用:
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);

和:
cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

set 方法能夠讓我們通過簡單的設定星期中的哪一天這個域來將我們的時間調整為星期五. 注意到這裡我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性. add 方法讓我們能夠在日期上加上數值. 潤年的所有複雜的計算都由這個方法自動處理.

我們這個例子的輸出結果是:
System Date: Saturday, September 29, 2001
當我們將它設定成星期五以後就成了: Friday, September 28, 2001
Friday, September 13, 2002
Friday, December 13, 2002
Friday, June 13, 2003
Friday, February 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


七、時間掌握在你的手裡

有了這些Date 和Calendar 類的例子, 你應該能夠使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 建立許多方法了.

java中Calendar日期對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.