/**
* 測試Date類
* DateFormat抽象類 SimpleDateFormat類 用于日期和字符串之間轉換
*/
public class TestDate {
public static void main(String[] args) {
long nowTime = System.currentTimeMillis();
//返回當前時間 單位毫秒 從1970-01-01 0:00開始計算的總毫秒值 在1970以后為正數 以前為負數
//JAVA.lang.System類靜態方法
long max = Long.MAX_VALUE;
//包裝類Long中存放常量 MAX MIN
long range = max/(1000L*3600*24*365);
//1000毫秒 加L轉為long類型防止int溢出
System.out.println(range+"的結果為292471208");
//范圍為正負2.9億年
Date d1 = new Date();
System.out.println(d1+"的結果為Mon Jul 11 20:52:25 CST 2022");
//無參new Date()返回當前時間的Date對象 d1.fastTime存儲當前時間System.currentTimeMillis()的long值
System.out.println(d1.getTime()+"的結果為1657544258209");
//.getTime()返回fastTime
System.out.println(d1.getTime()/(1000L*3600*24*365)+"的結果為52 即從1970至今(2022)52年");
Date d2 = new Date(1000L*3600*24*365*52);
//傳參long 毫秒
System.out.println(d2+"的結果為Sun Dec 19 08:00:00 CST 2021 有閏年所以有誤差");
SimpleDateFormat df = new SimpleDateFormat();
//format格式化 ()中的參數為字符串 通過輸入的字符串設定日期的匹配格式和輸出格式 無參默認格式為"yy-MM-dd 上/下午hh:mm" DateFormat為抽象類 可以用做引用類型 構造器需要用SimpleDateFormat()
System.out.println(df.format(d1)+"的結果為22-7-11 下午9:38");
//yy22 MM7 dd11 下午 hh9 :mm38 .format()將Date對象轉換為字符串String 按照df設定好的格式
try {
System.out.println(df.parse("90-12-20 上午11:30"));
//parse解析操作要求處理ParseException try/catch和throws二選一
//結果為Thu Dec 20 11:30:00 CST 1990
//.parse()將符合設定格式的字符串轉換為Date對象 print的結果為Date對象.toString 所以格式和設定的格式不同
//這里90轉換為1990
} catch (ParseException e) {
throw new RuntimeException(e);
}
DateFormat df2 = new SimpleDateFormat("年份:yyyy 月份大寫的:MM 日:dd 小時0-23:HH 分鐘:mm 秒:ss 年里的第幾周:w 年里的第幾天:D 星期幾大寫的:EEE三個字符就顯示單詞的前三位");
try {
Date d4 = df2.parse("年份:2022 月份大寫的:07 日:11 小時0-23:22 分鐘:04 秒:25 年里的第幾周:29 年里的第幾天:192 星期幾大寫的:星期一三個字符就顯示單詞的前三位"/*中文環境下顯示為漢字星期幾*/);
System.out.println(d4+"的結果為Mon Jul 11 22:04:25 CST 2022");
//格式中的EEE在中文環境下變成了 星期幾 格式中的字母是固定含義的 比如年份只能用y表示 不同在于 yy代表末尾兩位數 yyyy代表四位年份 但第幾周的w一個就對應了29 第幾天的D一個就對應了192
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}