java 日期物件 Date vs Calendar

  • Post category:javase

java 日期物件 Date在 Java 1995年推出的時候,就是已經存在的古老元件。90年代末期的電腦環境,

充斥著千禧年的危機,當時年份只有兩碼,所以,一旦過了1999年12月31日之後,時間就回到1900年1月1日了。

史恩康納萊主演的電影-將計就計,也就是用千禧年的危機當作題材。

不過,還好都平安度過了。現在的java 日期物件,年份可以用很久了。

java 日期物件 Date 怎麼用

java.util.Date 儲存了日期時間等資訊,但是,各位都知道地球是圓的,1884年在華盛頓召開的一次國際經度會議, 以每15度一個時區做劃分, 將全球區域分為24個時區。

可偏偏 java.util.Date 中,沒有儲存時區的資訊,所以,如果只是處理當地的日期時間資訊夠用了,但如果要誇時區就要另外處理了,

建立 Date

程式碼:

import java.util.Date;
public class UseDate {
        public static void main(String[] args) {
                Date date = new Date();//會建立以當下日期時間資訊為主的物件。
                System.out.println(date);
        }
}

輸出:

Tue Jun 13 10:52:48 CST 2023

java 日期物件 Calendar 怎麼用

日期物件建立好之後,如果要調整裡面的時間,該怎麼做?

Date 物件上雖然有可以設定指定時間的Method,但是,根據API的文件,是建議你不要使用了。

而要改用 Calendar 來進行調整,甚至直接使用 Calendar 設定好日期時間資訊後,再產生日期物件。

程式碼:

import java.util.Calendar;
public class UseCalendar {
        public static void main(String[] args) {
                Calendar cal = Calendar.getInstance();
                System.out.println(cal.getTime());
        }
}

輸出:

Tue Jun 13 11:36:24 CST 2023

Calendar 設定年月日時分秒

Method 都是同一個,但是,要另外指定調整的對象,如:

年: cal.set(Calendar.Year , 2024);

程式碼:

import java.util.Calendar;
public class UseCalendar {
        public static void main(String[] args) {
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR,2024);//年
                cal.set(Calendar.MONTH, Calendar.AUGUST);//月
                cal.set(Calendar.MONTH, 7);//月 數字從0開始
                cal.set(Calendar.DAY_OF_MONTH,8 );//日
                cal.set(Calendar.HOUR,1);//時
                cal.set(Calendar.MINUTE,1);//分
                cal.set(Calendar.SECOND,1);//秒
                System.out.println(cal.getTime());//轉成 Date物件
        }
}

輸出:

Thu Aug 08 01:01:01 CST 2024

Calendar 調整時間-以目前的時間為基準往前或往後調整

使用 add method

程式碼:

import java.util.Calendar;
public class UseCalendar {
        public static void main(String[] args) {
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR,2024);//年
                cal.set(Calendar.MONTH, Calendar.AUGUST);//月
                cal.set(Calendar.MONTH, 7);//月 數字從0開始
                cal.set(Calendar.DAY_OF_MONTH,8 );//日
                cal.set(Calendar.HOUR,1);//時
                cal.set(Calendar.MINUTE,1);//分
                cal.set(Calendar.SECOND,1);//秒
                System.out.println(cal.getTime());//轉成 Date物件
                cal.add(Calendar.HOUR, 4);//增加四小時
                cal.add(Calendar.DAY_OF_MONTH, -1);//減少一日
                System.out.println(cal.getTime());//轉成 Date物件
        }
}

輸出:

Thu Aug 08 01:01:01 CST 2024

Wed Aug 07 05:01:01 CST 2024

使用 roll method

也可以目前的時間為基準往前或往後調整,但是,不會進位

比如:增加24小時,不會造成日前往前一日

程式碼:

import java.util.Calendar;
public class UseCalendar {
        public static void main(String[] args) {
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR,2024);//年
                cal.set(Calendar.MONTH, Calendar.AUGUST);//月
                cal.set(Calendar.MONTH, 7);//月 數字從0開始
                cal.set(Calendar.DAY_OF_MONTH,8 );//日
                cal.set(Calendar.HOUR,1);//時
                cal.set(Calendar.MINUTE,1);//分
                cal.set(Calendar.SECOND,1);//秒
                System.out.println(cal.getTime());//轉成 Date物件
                cal.roll(Calendar.HOUR, 24);//增加24小時         
                System.out.println(cal.getTime());//轉成 Date物件
                cal.add(Calendar.HOUR, 24);//增加24小時        
                System.out.println(cal.getTime());//轉成 Date物件
        }
}

輸出:

Thu Aug 08 01:01:01 CST 2024

Thu Aug 08 01:01:01 CST 2024

Fri Aug 09 01:01:01 CST 2024

如何使用 Java 取得今天的日期

如何使用java 字串轉換日期  Convert String to Date

This Post Has 2 Comments

  1. skyvacay

    原來add 與 roll 的差別是在進位啊 ^^

  2. smile

    請問日期如果要轉換成字串,要怎麼處理呢?

Comments are closed.