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 | 1996 ; 96 |
Y |
Week year | Year | 2009 ; 09 |
M |
Month in year (context sensitive) | Month | July ; Jul ; 07 |
L |
Month in year (standalone form) | Month |
July ; Jul ; 07 |
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 | Tuesday ; Tue |
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 Time ; PST ; GMT-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