日期與時間【Date/SimpleDateFormat/Calendar】

来源:https://www.cnblogs.com/shionlingfan/archive/2023/05/06/17375424.html
-Advertisement-
Play Games

視頻鏈接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3 1 Data 1.1 Date類概述 Date類的對象在java中代表的是當前所在系統的此刻日期時間。 ...


視頻鏈接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3

1 Data

1.1 Date類概述

  1. Date類的對象在java中代表的是當前所在系統的此刻日期時間。
  2. Date的構造器
    public Date():創建一個Date對象,代表的是系統當前此刻日期時間。
  3. Date的常用方法
    public long getTime():獲取時間對象的毫秒值

1.2 Date類記錄時間的2種形式

  1. 日期對象
//1、創建一個Date對象,代表的是系統當前此刻日期時間。
Date date =new Date();
System.out.println(date);  //Fri May 05 21:09:54 CST 2023
  1. 時間毫秒值
  • 指的是從1970年1月1日 00:00:00走到此刻的總的毫秒數
//2、獲取時間毫秒值
long time = date.getTime();
System.out.println(time);   //1683292462323
long times = System.currentTimeMillis();
System.out.println(times);  //1683292462336

1.3 案例

  • 請計算出當前時間為往後走1小時121秒之後的時間是多少
  • 時間毫秒值→日期對象
    1. 構造器
      public Date(long time):把時間毫秒值轉換成Date日期對象
    2. Date方法
      public void setTime(long time):設置日期對象的時間為當前時間毫秒值對應的時間
//構造器
long time = System.currentTimeMillis();
time += (60 * 60 + 121) *1000;
Date d2 = new Date(time);
System.out.println(d2);
//Date方法
Date d3 = new Date();
d3.setDate(time);
System.out.println(d3);

2 SimpleDateFormat

2.1 SimpleDateFormat概述

  • 可以對Date對象或時間毫秒值格式化我們喜歡的時間形式。
  • 可以把字元串的時間形式解析成對象格式
  • 格式化的時間形式的常用的模式
    • y-年;M-月;d-日;
    • H-時;m-分;s-秒;
    • EEE-星期幾;a-上午/下午

1. SimpleDateFormat的構造器

構造器 說明
public SimpleDateFormat() 構造一個SimpleDateFormat,使用預設格式
public SimpleDateFormat(String pattern) 構造一個SimpleDateFormat,使用指定的格式
//1、日期對象
Date date = new Date();
System.out.println(date);  //Sat May 06 08:19:11 CST 2023
// 2、格式化這個日期對象(指定最終格式化的形式)   EEE 代表去星期幾  a 取上午還是下午
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss  EEE a ");
// 3、開始格式化日期對象成為字元串的形式
String rs = sdf.format(date);
System.out.println(rs);  //2023年05月06日 08:19:11  星期六 上午
//4、格式化時間毫秒值
//需求:121秒之後的時間是多少
long time = System.currentTimeMillis()+121*1000;
String rs2 = sdf.format(time);
System.out.println(rs2);  //2023年05月06日 08:21:12  星期六 上午

2. SimpleDateFormat的格式化方法

格式化方法 說明
public final String(Date date) 將日期格式化成日期/時間字元串
public final String(Object time) 將時間毫秒值化成日期/時間字元串
例子:
3. SimpleDateFormat解析字元串時間成為日期對象
解析方法 說明
public Date pasre(String source) 從給定字元串的開始解析文本以生成日期
package com.example.test.simpledateformat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo02 {
    public static void main(String[] args) throws ParseException {
        //SimpleDateFormat解析字元串時間成為日期對象
        //計算出2021年08月06日11點11分11秒,往後走2天14小時49分06秒後的時間是多少??
        // 1、把字元串時間拿到程式中來
        String dateStr = "2021年08月06日 11:11:11";
        // 2、把字元串時間解析成日期對象 !!形式必須與被解析時間的形式完全一樣,否則運行時解析報錯
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date d = sdf.parse(dateStr);
        // 3、往後走2天14小時49分06秒
        long time = d.getTime() + (2L*24*60*60+14*60*60+49*60+6)*1000;
        // 4、格式化時間毫秒值
        String rs = sdf.format(time);
        System.out.println(rs);
    }
}

2.2 總結

  1. SimpleDateFormat可以格式化日期對象和時間毫秒值。
  2. SimpleDateFormat調用parse方法對字元串時間進行解析,要求解析格式必須與被解析格式一樣。

2.4 案例

需求

  • 活動開始時間:2021-11-11 00:00:00
  • 活動結束時間:2021-11-11 00:10:00
  • 小賈下單並付款的時間為:2020年11月11日 00:03:47
  • 小皮下單並付款的時間為:2022年11月11日 00:10:11
  • 用代碼說明這兩位同學有沒有參加上秒殺活動?
package com.example.test.simpledateformat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo03 {
    public static void main(String[] args) throws ParseException {
        // 1、開始和結束時間
        String startTime = "2021-11-11 00:00:00";
        String endTime = "2021-11-11 00:10:00";

        // 2、記錄小賈,小皮
        String xiaoJia = "2021-11-11 00:03:47";
        String xiaoPi = "2021-11-11 00:10:11";

        // 3、解析時間
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(startTime);
        Date d2 = sdf.parse(endTime);
        Date d3 = sdf.parse(xiaoJia);
        Date d4 = sdf.parse(xiaoPi);
        if(d3.after(d1) && d3.before(d2)){
            System.out.println("小賈秒殺成功");
        }else{
            System.out.println("小賈秒殺失敗");
        }
        if(d4.after(d1) && d4.before(d2)){
            System.out.println("小皮秒殺成功");
        }else{
            System.out.println("小皮秒殺失敗");
        }
    }
}

3 Calendar

3.1 Calendar概述

  • Calendar代表了系統此刻日期對應的日曆對象。
  • Calendar是一個抽象類,不能直接創建對象
    Calendar日曆類創建日曆對象的方法
    public static Calendar getInstance():獲取當前日曆對象

3.2 Calendar常用方法

方法名 說明
public int get(int field) 取日期中的某個欄位信息
public void set(int field,int value) 修改日曆中某個欄位信息
public void add(int field,int amount) 為某個欄位增加/減少指定值
public final Date getTime() 拿到此刻日期對象
public long getTimeMillis() 拿到此刻時間毫秒值

note:Calendar是可變日期對象,一旦修改後其對象本身表示的時間將產生變化。

3.3 案例

1. 案例1

package com.example.test.calendar;
import java.util.Calendar;
import java.util.Date;

public class Demo01 {
    public static void main(String[] args) {
        //1、拿到系統此刻日曆對象
        Calendar cal = Calendar.getInstance();
        //2、 獲取日期信息
        int year = cal.get(Calendar.YEAR);
        System.out.println(year);
        int month = cal.get(Calendar.MONTH)+1;
        System.out.println(month);
        int days = cal.get(Calendar.DAY_OF_YEAR);  //一年中的第幾天
        System.out.println(days);
        // 3、修改日曆中某個欄位信息
        cal.set(Calendar.HOUR,12); //一般不會修改時間
        // 請問64天後是什麼是時間
        cal.add(Calendar.DAY_OF_YEAR, 64);
        // 拿到此刻日期對象
        Date time = cal.getTime();
        System.out.println(time);
        // 拿到此刻日期毫秒值
        long times = cal.getTimeInMillis();
        System.out.println(times);
    }
}

2. 案例2:獲取指定日期加某幾月之後的日期

public class Demo02 {
    public static void main(String[] args) throws ParseException {
        String time = "2023-01-30";	//當前時間
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date currdate = format.parse(time);
        System.out.println("初始的時間是:" + time);
        Calendar ca = Calendar.getInstance();
        ca.setTime(currdate);
        ca.add(Calendar.MONTH, 1);
        currdate = ca.getTime();
        String enddate = format.format(currdate);
        System.out.println("增加天數以後的時間:" + enddate);
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端開發中涉及表單的頁面非常多,看似功能簡單,開發快速,實則占去了很大一部分時間。當某個表單包含元素過多時還會導致html代碼過多,vue文件過大。從而不容易查找、修改和維護。為了提高開發效率及降低維護成本,下麵介紹表單配置化組件的封裝原理與封裝方法。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. provide/inject provide/inject 是 Vue.js 中用於跨組件傳遞數據的一種高級技術,它可以將數據註入到一個組件中,然後讓它的所有子孫組件都可以訪問到這個數據。通常情況下,我們在父組件中使用 provid ...
  • 前兩天我寫了一個上傳下載功能 使用<el-upload>組件 當後端將文件流格式數據發送到響應裡面前端屈接受的時候 ,我們使用 <el-upload> 組件裡面的 :on-success 方法進行捕捉,使用blob進行文件下載 文件可以正常下載下來 但是打開文件損壞 我去網上尋找答案, 但大多都是說 ...
  • 本文使用 React + Three.js + React Three Fiber 技術棧,實現一個《塞爾達傳說:王國之淚》主題風格基於滾動控制的平滑滾動圖片展示頁面。通過本文的閱讀,你將學習到的知識點包括:瞭解 R3F 中 useFrame hook 及 useThree hook 基本原理及用法... ...
  • 解決的問題 避免新開發的代碼影響提測的代碼 避免生產環境出現問題後,修複後,由於代碼混亂,無法合併到生產環境 解決多個需求並行開發,並行測試,合併上線的問題 我的設計思路 流程圖工具我使用的是:diagrams.net 具體執行步驟 開發人員按需求粒度從dev建立分支 哪個需求或者哪些需求提測,就把 ...
  • 本文首發於公眾號:Hunter後端 原文鏈接:Django筆記三十六之單元測試彙總介紹 Django 的單元測試使用了 Python 的標準庫:unittest。 在我們創建的每一個 application 下麵都有一個 tests.py 文件,我們通過繼承 django.test.TestCase ...
  • 用go設計開發一個自己的輕量級登錄庫/框架吧 幾乎每個項目都會有登錄,退出等用戶功能,而登錄又不單僅僅是登錄,我們要考慮很多東西。 token該怎麼生成?生成什麼樣的? 是在Cookie存token還是請求頭存token?讀取的時候怎麼讀取? 允許同一個賬號被多次登錄嗎?多次登錄他們的token是一 ...
  • 關於最近學習記下來的一些要點以及模糊的地方總結 對象類型和引用類型可以用鏈式結構 2進位是toBinaryString 10進位是Decimal 16進位是toHexString 8進位是octal final 1.修飾類 不能被繼承 2.修飾方法 不能被重寫,能被重載 3.修飾變數 值不可被重新賦 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...