NET2Java之四:日期處理

日期操作是日常開發中繞不開的一環,Java 8之前使用Date API,Java 8之後推薦使用LocalDate API。

Java 8之前的日期操作

在Java 8之前,主要使用Date、Calendar、SimpleDateFormat來操作日期,不得不說習慣了.NET中的DateTime之後,再用這套API來操作日期,就一個評價:“爛”的“遙遙領先”。
Date
Java中表示日期和時間的類,一般用於獲取當前的日期和時間。

  • new Date():表示的就是當前日期。
  • toString():當前日期按文本格式輸出,格式類似於這樣:Wed Apr 03 09:59:51 CST 2024
  • after():日期比較,還有一個before()函數,用於判斷日期在當前日期之前還是之後。
  • getYear():你認爲他返回的是年份,其實他返回的是當前年份-1900年,比如2024返回的就是124,你以爲這就完了,getMonth()居然是從0開始的,也就是說現在是4月,他的返回值就是3,所以爲啥Java的學習氛圍比.NET的好,一個小小的日期操作,就讓我學到了要知其然更要知其所以然,尤其不能想當然。
  • getTime():返回一個UNIX時間戳,即1970年1月1日以來的毫秒數。

SimpleDateFormat
很明顯,toString()這種東西是無法滿足日常的格式化輸出需求的,這個時候我們就需要用到SimpleDateFormat,比如我們常見的格式化yyyy-MM-dd HH:mm:ss輸出。

    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(date));

還有常見的字符串轉日期操作:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String frd = "1949-10-01 03:00:00";
    Date date = sdf.parse(frd);

Calendar
項目中也經常要用到日期計算,Date稍有些力不從心,這時就需要Calendar,來處理日期和時間的計算。

  • getInstance():Calendar是一個抽象類,不能直接實例化。
  • set():可以設置年份,月份、日期等,如calendar.set(2023,Calendar.FEBRUARY,28),當然你也可以通過calendar.set(Calendar.YEAR,2023)來單獨設置。
  • add():日期的加減操作了,比如calendar.add(Calendar.DAY_OF_MONTH,1)
  • getTime():Calendar對象轉Date。
  • setTime(): Date對象轉Calendar。

Java 8之後的日期操作

估計也是受夠了老式API,Java 8的對日期操作做了全新改進,我們可以通過java.time下的LocalDate、LocalDate、LocalDateTime、DateTimeFormatter等來處理日期和時間。
LocalDate
日期操作類,提供了各種方法來操作日期。

    LocalDate.now(); //當前日期
    LocalDate.of(1949, 10, 1); //指定日期
    LocalDate.parse("1949-10-01"); //日期轉換
    LocalDate.now().getYear(); //獲取年 就是當前年
    LocalDate.now().getMonthValue(); //返回月 就是當月
    LocalDate.now().getDayOfMonth(); //返回日 就是當日

LocalTime
時間操作類,不包含日期,包括小時、分鐘、秒和毫秒。

    LocalTime.now(); //獲取當前時間如:13:24:25.479
    LocalTime.of(13, 30, 0);//指定時間
    LocalTime.now().getHour(); //獲取小時
    LocalTime.now().getMinute(); //獲取分鐘
    LocalTime.now().getSecond(); //獲取秒

LocalDateTime
表示日期和時間,已經很接近.NET中的DateTime了,也是處理日期和時間的主要類之一。

    LocalDateTime.now(); //獲取當前日期和時間
    LocalDateTime.of(1949, 10, 1, 15, 0); //創建指定日期和時間
    LocalDateTime.parse("1949-10-01T15:00:00"); //日期轉換,注意這個T是必須的
    LocalDateTime.parse("1949-10-01 15:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); //固定格式轉換

Duration
對標.NET中的TimeSpan。

    LocalDateTime now = LocalDateTime.now();
    LocalDateTime born = LocalDateTime.of(1949, 10, 1, 15, 0);
    Duration duration = Duration.between(born, now); //計算日期差,可以精確到納秒
    long day = duration.toDays();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章