日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 时间处理_JAVA处理日期时间常用方法

發布時間:2024/9/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 时间处理_JAVA处理日期时间常用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等

日歷字段之間的轉換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距歷元(即格林威治標準時間

1970 年 1 月 1 日的

00:00:00.000,格里高利歷)的偏移量。

例:Calendar cal =

Calendar.getInstance();//使用默認時區和語言環境獲得一個日歷。

cal.add(Calendar.DAY_OF_MONTH,

-1);//取當前日期的前一天.

cal.add(Calendar.DAY_OF_MONTH,

+1);//取當前日期的后一天.

//通過格式化輸出日期

java.text.SimpleDateFormat format = new

java.text.SimpleDateFormat("yyyy-MM-dd");

System.out.println("Today

is:"+format.format(Calendar.getInstance().getTime()));

System.out.println("yesterday

is:"+format.format(cal.getTime()));

得到2007-12-25日期: Calendar calendar = new GregorianCalendar(2007, 11,

25,0,0,0);

Date date = calendar.getTime();System.out.println("2007 Christmas

is:"+format.format(date));

//java月份是從0-11,月份設置時要減1.

//GregorianCalendar構造方法參數依次為:年,月-1,日,時,分,秒.

取日期的部分: int year

=calendar.get(Calendar.YEAR);

int

month=calendar.get(Calendar.MONTH)+1;

int day

=calendar.get(Calendar.DAY_OF_MONTH);

int hour

=calendar.get(Calendar.HOUR_OF_DAY);

int minute

=calendar.get(Calendar.MINUTE);

int seconds

=calendar.get(Calendar.SECOND);

取月份要加1.判斷當前月份的最大天數:

Calendar cal =

Calendar.getInstance();

int

day=cal.getActualMaximum(Calendar.DAY_OF_MONTH);

System.out.println(day);

java.util.Date

Date

表示特定的瞬間,精確到毫秒。從 JDK 1.1 開始,應該使用 Calendar 類實現日期和時間字段之間轉換,使用

DateFormat 類來格式化和分析日期字符串。Date 中的相應方法已廢棄。 盡管 Date 類打算反映協調世界時

(UTC),但無法做到如此準確,這取決于 Java 虛擬機的主機環境。當前幾乎所有操作系統都假定 1 天 = 24 × 60 × 60

= 86400 秒。但對于 UTC,大約每一兩年出現一次額外的一秒,稱為“閏秒”。閏秒始終作為當天的最后一秒增加,并且始終在 12 月

31 日或 6 月 30 日增加。例如,1995 年的最后一分鐘是 61

秒,因為增加了閏秒。大多數計算機時鐘不是特別的準確,因此不能反映閏秒的差別。

在類 Date 所有可以接受或返回年、月、日期、小時、分鐘和秒值的方法中,將使用下面的表示形式: 年份 y 由整數 y - 1900

表示。

月份由從 0 至 11 的整數表示;0 是一月、1 是二月等等;因此 11

是十二月。

日期(一月中的某天)按通常方式由整數 1 至 31 表示。

小時由從 0 至 23 的整數表示。因此,從午夜到 1 a.m. 的時間是 0 點,從中午到 1 p.m. 的時間是 12

點。

分鐘按通常方式由 0 至 59 的整數表示。

秒由 0 至 61 的整數表示;值 60 和 61 只對閏秒發生,盡管那樣,也只用在實際正確跟蹤閏秒的 Java

實現中。于按當前引入閏秒的方式,兩個閏秒在同一分鐘內發生是極不可能的,但此規范遵循 ISO C

的日期和時間約定。

在所有情形中,針對這些目的賦予方法的參數不需要在指定的范圍內;例如,可以把日期指定為 1 月 32 日,并把它解釋為 2 月 1

日的相同含義。

java.util.Date today=new

java.util.Date();

System.out.println("Today is

"+formats.format(today));

取當月的第一天:

java.text.SimpleDateFormat format = new

java.text.SimpleDateFormat("yyyy-MM-01");

java.util.Date firstDay=new

java.util.Date();

System.out.println("the month first day is

"+formats.format(firstDay));

取當月的最后一天:

Calendar cal =

Calendar.getInstance();

int

maxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);

java.text.Format formatter3=new

java.text.SimpleDateFormat("yyyy-MM-"+maxDay);

System.out.println(formatter3.format(cal.getTime()));

求兩個日期之間相隔的天數:

java.text.SimpleDateFormat format = new

java.text.SimpleDateFormat("yyyy-MM-dd");

java.util.Date beginDate=

format.parse("2007-12-24");

java.util.Date endDate=

format.parse("2007-12-25");

long

day=(date.getTime()-mydate.getTime())/(24*60*60*1000);

System.out.println("相隔的天數="+day);

一年前的日期:

java.text.Format formatter=new

java.text.SimpleDateFormat("yyyy-MM-dd");

java.util.Date todayDate=new

java.util.Date();

long

beforeTime=(todayDate.getTime()/1000)-60*60*24*365;

todayDate.setTime(beforeTime*1000);

String

beforeDate=formatter.format(todayDate);

System.out.println(beforeDate);

一年后的日期:

java.text.Format formatter=new

java.text.SimpleDateFormat("yyyy-MM-dd");

java.util.Date todayDate=new

java.util.Date();

long

afterTime=(todayDate.getTime()/1000)+60*60*24*365;

todayDate.setTime(afterTime*1000);

String

afterDate=formatter.format(todayDate);

System.out.println(afterDate);

求10小時后的時間

java.util.Calendar

Cal=java.util.Calendar.getInstance();

Cal.setTime(dateOper);

Cal.add(java.util.Calendar.HOUR_OF_DAY,10);

System.out.println("date:"+forma.format(Cal.getTime()));

求10小時前的時間

java.util.Calendar

Cal=java.util.Calendar.getInstance();

Cal.setTime(dateOper);

Cal.add(java.util.Calendar.HOUR_OF_DAY,-10);

System.out.println("date:"+forma.format(Cal.getTime()));

3.java.sql.Date

繼承自java.util.Date,是操作數據庫用的日期類型

一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為

SQL

DATE

值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。為了與

SQL

DATE

的定義一致,由

java.sql.Date

實例包裝的毫秒值必須通過將時間、分鐘、秒和毫秒設置為與該實例相關的特定時區中的零來“規范化”。

java.sql.Date sqlDate = new

java.sql.Date(java.sql.Date.valueOf("2007-12-25").getTime());

日期比較:簡單的比較可以以字符串的形式直接比較,也可使用

java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18"))方式來比較日期的大小.也可使用java.util.Date.after(java.util.Date)來比較.

4.java.util.GregorianCalendar

GregorianCalendar

Calendar

的一個具體子類,提供了世界上大多數國家/地區使用的標準日歷系統。

GregorianCalendar

是一種混合日歷,在單一間斷性的支持下同時支持儒略歷和格里高利歷系統,在默認情況下,它對應格里高利日歷創立時的格里高利歷日期(某些國家/地區是在

1582 年 10 月 15

日創立,在其他國家/地區要晚一些)。可由調用方通過調用

setGregorianChange()

來更改起始日期。

歷史上,在那些首先采用格里高利歷的國家/地區中,1582 年 10 月 4 日(儒略歷)之后就是 1582 年 10 月 15

日(格里高利歷)。此日歷正確地模擬了這些變化。在開始格里高利歷之前,

GregorianCalendar

實現的是儒略歷。格里高利歷和儒略歷之間的惟一區別就是閏年規則。儒略歷指定每 4 年就為閏年,而格里高利歷則忽略不能被 400

整除的世紀年。

GregorianCalendar

可實現預期的

格里高利歷和儒略歷。也就是說,可以通過在時間上無限地向后或向前外推當前規則來計算日期。因此,對于所有的年份,都可以使用

GregorianCalendar

來生成有意義并且一致的結果。但是,采用現代儒略歷規則時,使用

GregorianCalendar

得到的日期只在歷史上從公元 4 年 3 月 1 日之后是準確的。在此日期之前,閏年規則的應用沒有規則性,在 45 BC

之前,甚至不存在儒略歷。

在格里高利歷創立以前,新年是 3 月 25 日。為了避免混淆,此日歷始終使用 1 月 1 日為新年。如果想要格里高利歷轉換之前并且處于

1 月 1 日和 3 月 24

日之間的日期,則可以進行手動調整。

WEEK_OF_YEAR

字段所計算的值的范圍從 1 到 53。一年的第一個星期始于

getFirstDayOfWeek()

的最早 7 天,至少包含該年的

getMinimalDaysInFirstWeek()

各天。這取決于

getMinimalDaysInFirstWeek()

getFirstDayOfWeek()

的值以及 1 月 1 日是星期幾。一年的第一個星期和下一年的第一個星期之間的各個星期按順序從 2 到 52 或

53(根據需要)進行編號。

例如,1998 年 1 月 1 日是星期四。如果

getFirstDayOfWeek()

MONDAY

,并且

getMinimalDaysInFirstWeek()

為 4(這些值反映了 ISO 8601 和很多國家/地區標準),則 1998 年的第一個星期開始于 1997 年 12 月 29

日,結束于 1998 年 1 月 4 日。但是,如果

getFirstDayOfWeek()

SUNDAY

,那么 1998 年的第一個星期開始于 1998 年 1 月 4 日,結束于 1998 年 1 月 10 日;1998 年頭三天是

1997 年第 53 個星期的一部分。

WEEK_OF_MONTH

字段所計算的值的范圍從 0 到 6。一個月的第一個星期(

WEEK_OF_MONTH = 1

的日期)是該月至少連續

getMinimalDaysInFirstWeek()

天中的最早日期,結束于

getFirstDayOfWeek()

的前一天。與一年的第一個星期不同,一個月的第一個星期可能短于 7

天,也不必從

getFirstDayOfWeek()

這一天開始,并且不包括前一個月的日期。在第一個星期之前該月日期的

WEEK_OF_MONTH

為 0。

5. java.text.DateFormat

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化并分析日期或時間。日期/時間格式化子類(如

SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和標準化。將日期表示為

Date 對象,或者表示為從 GMT(格林尼治標準時間)1970 年,1 月 1 日 00:00:00

這一刻開始的毫秒數。

DateFormat 提供了很多類方法,以獲得基于默認或給定語言環境和多種格式化風格的默認日期/時間

Formatter。格式化風格包括 FULL、LONG、MEDIUM 和

SHORT。方法描述中提供了使用這些風格的更多細節和示例。

DateFormat

可幫助進行格式化并分析任何語言環境的日期。對于月、星期,甚至日歷格式(陰歷和陽歷),其代碼可完全與語言環境的約定無關。

要格式化一個當前語言環境下的日期,可使用某個靜態工廠方法:

myString =

DateFormat.getDateInstance().format(myDate);

如果格式化多個日期,那么獲得該格式并多次使用它是更為高效的做法,這樣系統就不必多次獲取有關環境語言和國家/地區約定的信息了。

DateFormat df =

DateFormat.getDateInstance();

for (int i = 0; i < myDate.length; ++i)

{

output.println(df.format(myDate[i]) + ";

");

}

要格式化不同語言環境的日期,可在 getDateInstance()

的調用中指定它。

DateFormat df = DateFormat.getDateInstance(DateFormat.LONG,

Locale.FRANCE);

還可使用 DateFormat 進行分析。

myDate = df.parse(myString);

使用 getDateInstance 來獲得該國家/地區的標準日期格式。另外還提供了一些其他靜態工廠方法。使用

getTimeInstance 可獲得該國家/地區的時間格式。使用 getDateTimeInstance

可獲得日期和時間格式。可以將不同選項傳入這些工廠方法,以控制結果的長度(從 SHORT 到 MEDIUM 到 LONG 再到

FULL)。確切的結果取決于語言環境,但是通常:

SHORT 完全為數字,如 12.13.52 或 3:30pm

MEDIUM 較長,如 Jan 12, 1952

LONG 更長,如 January 12, 1952 或

3:30:32pm

FULL 是完全指定,如 Tuesday, April 12, 1952 AD 或 3:30:42pm

PST。

如果愿意,還可以在格式上設置時區。如果想對格式化或分析施加更多的控制(或者給予用戶更多的控制),可以嘗試將從工廠方法所獲得的

DateFormat 強制轉換為 SimpleDateFormat。這適用于大多數國家/地區;只是要記住將其放入一個 try

代碼塊中,以防遇到特殊的格式。

還可以使用借助 ParsePosition 和 FieldPosition

的分析和格式化方法形式來

逐步地分析字符串的各部分。

對齊任意特定的字段,或者找出字符串在屏幕上的選擇位置。

6. java.text.SimpleDateFormat

SimpleDateFormat

是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 ->

日期)和規范化。

SimpleDateFormat

使得可以選擇任何用戶定義的日期-時間格式的模式。但是,仍然建議通過

DateFormat

中的

getTimeInstance

getDateInstance

getDateTimeInstance

來新的創建日期-時間格式化程序。每一個這樣的類方法都能夠返回一個以默認格式模式初始化的日期/時間格式化程序。可以根據需要使用

applyPattern

方法來修改格式模式。有關使用這些方法的更多信息,請參閱

DateFormat

日期和時間模式

日期和時間格式由日期和時間模式

字符串指定。在日期和時間模式字符串中,未加引號的字母

'A'

'Z'

'a'

'z'

被解釋為模式字母,用來表示日期或時間字符串元素。文本可以使用單引號

(

'

) 引起來,以免進行解釋。

"''"

表示單引號。所有其他字符均不解釋;只是在格式化時將它們簡單復制到輸出字符串,或者在分析時與輸入字符串進行匹配。

定義了以下模式字母(所有其他字符

'A'

'Z'

'a'

'z'

都被保留):

模式字母通常是重復的,其數量確定其精確表示:

number。

對于分析來說,如果模式字母的數量大于 2,則年份照字面意義進行解釋,而不管數位是多少。因此使用模式 "MM/dd/yyyy",將

"01/11/12" 分析為公元 12 年 1 月 11 日。

總結

以上是生活随笔為你收集整理的java 时间处理_JAVA处理日期时间常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。