1. 程式人生 > >Java Calendar 日曆類的時間操作 Timestamp Date Calendar 相互轉換

Java Calendar 日曆類的時間操作 Timestamp Date Calendar 相互轉換

Java Calendar 日曆類的時間操作,這也許是 Java 環境下建立和管理日曆及操作時間最簡單的一個方案了,示範程式碼也很簡單。

演示了獲取時間,日期時間的累加和累減,以及日期時間的比較。

原文地址:blog.csdn.net/joyous/article/details/9630893

注意事項:

Calendar 的 month 從 0 開始,也就是全年 12 個月由 0 ~ 11 進行表示。

而 Calendar.DAY_OF_WEEK 定義值如下,每週從 SUNDAY 開始,從 1 ~ 7:

Calendar.SUNDAY = 1
Calendar.MONDAY = 2
Calendar.TUESDAY = 3
Calendar.WEDNESDAY = 4
Calendar.THURSDAY = 5
Calendar.FRIDAY = 6
Calendar.SATURDAY = 7

SimpleDateFormat 的格式定義

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 199696
Y Week year Year 200909
M Month in year (context sensitive) Month JulyJul07
L Month in year (standalone form) Month
JulyJul07
w Week in year 27
W Week in month 2
D Day in year 189
d Day in month 10
F Day of week in month 2
E Day name in week Text TuesdayTue
u Day number of week (1 = Monday, ..., 7 = Sunday) 1
a Am/pm marker Text PM
H Hour in day (0-23) 0
k Hour in day (1-24) 24
K Hour in am/pm (0-11) 0
h Hour in am/pm (1-12) 12
m Minute in hour 30
s Second in minute 55
S Millisecond 978
z Time zone Pacific Standard TimePSTGMT-08:00
X Time zone -08-0800-08:00

Java Calendar 演示程式碼如下:

package demo;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;

public class Test
{
  public Test()
  {
  }

  public static void main(String[] args)
  {
    // 字串轉換日期格式
    // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 接收傳入引數
    // String strDate = args[1];
    // 得到日期格式物件
    // Date date = fmtDateTime.parse(strDate);

    // 完整顯示今天日期時間
    String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());
    System.out.println(str);

    // 建立 Calendar 物件
    Calendar calendar = Calendar.getInstance();

    try
    {
      // 對 calendar 設定時間的方法
      // 設定傳入的時間格式
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s");
      // 指定一個日期
      Date date = dateFormat.parse("2013-6-1 13:24:16");
      // 對 calendar 設定為 date 所定的日期
      calendar.setTime(date);

      // 按特定格式顯示剛設定的時間
      str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
      System.out.println(str);
    }
    catch (ParseException e)
    {
      e.printStackTrace();
    }

    // 或者另一種設定 calendar 方式
    // 分別為 year, month, date, hourOfDay, minute, second
    calendar = Calendar.getInstance();
    calendar.set(2013, 1, 2, 17, 35, 44);
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
    System.out.println(str);

    // Calendar 取得當前時間的方法
    // 初始化 (重置) Calendar 物件
    calendar = Calendar.getInstance();
    // 或者用 Date 來初始化 Calendar 物件
    calendar.setTime(new Date());

    // setTime 類似上面一行
    // Date date = new Date();
    // calendar.setTime(date);

    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());
    System.out.println(str);

    // 顯示年份
    int year = calendar.get(Calendar.YEAR);
    System.out.println("year is = " + String.valueOf(year));

    // 顯示月份 (從0開始, 實際顯示要加一)
    int month = calendar.get(Calendar.MONTH);
    System.out.println("nth is = " + (month + 1));

    // 本週幾
    int week = calendar.get(Calendar.DAY_OF_WEEK);
    System.out.println("week is = " + week);

    // 今年的第 N 天
    int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
    System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);

    // 本月第 N 天
    int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));

    // 3小時以後
    calendar.add(Calendar.HOUR_OF_DAY, 3);
    int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
    System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);

    // 當前分鐘數
    int MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE = " + MINUTE);

    // 15 分鐘以後
    calendar.add(Calendar.MINUTE, 15);
    MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE + 15 = " + MINUTE);

    // 30分鐘前
    calendar.add(Calendar.MINUTE, -30);
    MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE - 30 = " + MINUTE);

    // 格式化顯示
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
    System.out.println(str);

    // 重置 Calendar 顯示當前時間
    calendar.setTime(new Date());
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
    System.out.println(str);

    // 建立一個 Calendar 用於比較時間
    Calendar calendarNew = Calendar.getInstance();

    // 設定為 5 小時以前,後者大,顯示 -1
    calendarNew.add(Calendar.HOUR, -5);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));

    // 設定7小時以後,前者大,顯示 1
    calendarNew.add(Calendar.HOUR, +7);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));

    // 退回 2 小時,時間相同,顯示 0
    calendarNew.add(Calendar.HOUR, -2);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));
  }
}

執行結果

2013-06-07 23:27:34:195
2013-06-01 13:24:16:000
2013-02-02 17:35:44:197
2013-06-07 23:27:34:197
year is = 2013
nth is = 6
week is = 6
DAY_OF_YEAR is = 158
DAY_OF_MONTH = 7
HOUR_OF_DAY + 3 = 2
MINUTE = 27
MINUTE + 15 = 42
MINUTE - 30 = 12
2013-06-08 02:12:34:197
2013-06-07 23:27:34:199
時間比較:-1
時間比較:1
時間比較:0

要計算時間差,可用 Calendar.getTimeInMillis() 取得兩個時間的微秒級的時間差,再加以換算即可,比如獲得相差天數,程式碼如下:

    // 得微秒級時間差
    long val = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis();
    // 換算後得到天數
    long day = val / (1000 * 60 * 60 * 24);

其他與 date 相關的型別轉換程式碼如下。

Timestamp 型別轉換為 Date 型別:

Timestamp stamp = new Timestamp(System.currentTimeMillis());
Date date = new Date(stamp.getTime());
System.out.println(date);

Timestamp 型別轉換為 Calendar 型別:

// 獲取 Timestamp 型別時間
Timestamp timestamp = new Timestamp(System.currentTimeMillis());

// 轉換為 Calendar 型別,SUN 也推薦用 Calendar 處理時間資訊
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp.getTime());

Date 型別轉換為 Calendar 型別:

// Date 向 Calendar 賦值
calendar.setTime(date);

Calendar 型別轉換為 Timestamp 型別:

// 建立 Calendar 物件,也同時獲取了當前時間
Calendar calendar = Calendar.getInstance();

// 轉換為 Timestamp 型別物件
Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
System.out.println(timestamp);

Calendar 型別轉換為 Date 型別:

// Calendar 物件型別轉換為 Date 物件型別
Calendar calendar = Calendar.getInstance();
java.util.Date date = calendar.getTime();
System.out.println(date);

StringDate 轉換為 Date 或者 Timestamp

/* 將字串日期或者日期時間轉換為 timestamp 格式 */
try
  {
    // 一個字串日期
    String strDate = "2020-01-31";

    // 設定傳入格式
    // yyyy-MM-dd 或者完整的 yyyy-MM-dd HH:mm:ss
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = dateFormat.parse(strDate);

    // 建立 Calendar 用於處理 date 物件
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    // 由 calendar 物件生成 timestamp
    Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
    System.out.printf(timestamp);
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }

原文地址:blog.csdn.net/joyous/article/details/9630893

Q群討論:236201801