欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中常用的日期類圖文詳解

 更新時(shí)間:2022年11月08日 09:17:00   作者:三文魚(yú)先生  
Java提供了Date類來(lái)處理日期、時(shí)間(此處的Date是指java.util包下的Date類,而不是java.sql包下的Date類),Date對(duì)象既包含日期,也包含時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Java中常用的日期類的相關(guān)資料,需要的朋友可以參考下

前言

本文將分析Java中的Date、CalendarDateFormat、SimpleDateFormat,并熟悉及使用其中的常用方法。

閱讀本文你將了解上述的各類。并且熟練日期的常用操作,包括但不限于:日期的比較、獲取日期中的信息、日期的加減、日期指定格式化等等

Date

日期類,這個(gè)大家應(yīng)該是比較熟悉的,常用的一條語(yǔ)句是

Date date = new Date();

上述代碼,用于獲取一個(gè)當(dāng)前的時(shí)間的Date對(duì)象。但是在源碼的注釋中明確表明,其中的很多方法已被廢棄。

為什么Date的大部分方法被棄用

那么為什么廢棄呢?我們來(lái)看注釋

注釋

原注釋如下

The class Date represents a specific instant in time, with millisecond 
precision.

Prior to JDK 1.1, the class Date had two additional functions. 
It allowed the interpretation of dates as year, month, day, hour,
 minute, and second values. It also allowed the formatting and parsing of date
  strings.
 Unfortunately, the API for these functions was not amenable to 
 internationalization. As of JDK 1.1, the Calendar class should be used to
convert between dates and time fields and the DateFormat class should be used to 
format and parse date strings. 

The corresponding methods in Date are deprecated.

翻譯

Date表示一個(gè)時(shí)間的瞬間,精確到毫秒。

在JDK1.1之前,該類有額外的兩個(gè)方法。它允許以年、月、日、小時(shí)、分和秒的值解析日期。還允許格式化和處理日期字符串。

可惜的是,這些方法的API并不適用于國(guó)際化。在JDK1.1中,Calender類應(yīng)該被用于日期和時(shí)間字段的間的轉(zhuǎn)換,DateFormat類應(yīng)該被用于格式化和處理日期字符串。

Date中相關(guān)的方法已棄用。

目前可用方法的測(cè)試示例

那么目前Date的主要作用是什么呢?我們挨個(gè)看看現(xiàn)在Date類中可用的方法。

可用方法

獲取時(shí)間

獲取日期的毫秒數(shù)(自1970年開(kāi)始)

long getTime()

日期前后的比較

boolean after(Date date)
boolean befor(Date date)
boolean compareTo(Date date)

設(shè)置時(shí)間

毫秒數(shù)設(shè)置時(shí)間

void setTime(long l);

相等判斷

boolean equals(Date date)

示例

public class Test {
    public static void main(String[] args) throws InterruptedException {
        Date date = new Date();
        //睡眠一毫秒 否則可能會(huì)導(dǎo)致date和date1相等
        Thread.sleep(1);
        Date date1 = new Date();
        //獲取當(dāng)前時(shí)間的毫秒數(shù)
        long l = date.getTime();
        System.out.println(l);
        if(date1.after(date))
            //以調(diào)用者為主 調(diào)用者是否在參數(shù)之后
            System.out.println("date1在date2之后");
        if(date.before(date1))
            //以調(diào)用者為主 調(diào)用者是否在參數(shù)之前
            System.out.println("date在date1之前");
        System.out.println("默認(rèn)的輸出格式:" + date.toString());
        System.out.println("與比自己大的日期比較:" + date.compareTo(date1));
        System.out.println("與比自己的日期比較:" + date.compareTo(date));
        System.out.println("與比自己小的日期比較:" + date1.compareTo(date));
        date.setTime(l + 5000); //以長(zhǎng)整型設(shè)置新的時(shí)間  加五秒
        System.out.println("五秒后的時(shí)間:" + date.toString());
        //獲取一個(gè)與當(dāng)前時(shí)間相同的Instant對(duì)象
        Instant instant = date.toInstant();
        if(date.equals(date1)) {
            //這里其實(shí)比較的就是Date的毫秒數(shù)
            System.out.println("日期不等。");
        }

    }
}

默認(rèn)日期格式的分析

從左到右依次為:星期 月份 時(shí):分:秒 日期類型 年份

這里的CTS指的是北京時(shí)間

Date小結(jié)

Date類主要的作用,從上面的方法看來(lái),很明顯是用于獲取一個(gè)當(dāng)前日期的對(duì)象以及日期間簡(jiǎn)單的前后比較。

Calendar

主要用于獲取日期中的信息以及操作日期。

簡(jiǎn)單介紹

日歷類,主要用于設(shè)置和操作日期。以及獲取一些日期里的信息,比如當(dāng)前日期是星期幾,今天是今年的第多少周等等。

常用的方法

獲取實(shí)例

Calendar getInstance();

獲取日期里的信息

這個(gè)是重點(diǎn),獲取許多日期中的信息基本都依賴于這個(gè)方法。比如當(dāng)前日期是星期幾今天是今年第幾天等。實(shí)例里會(huì)詳細(xì)說(shuō)明各個(gè)信息的獲取方式。

int get(int field)

這里再提一個(gè)方法,這個(gè)方法就是用于獲取日歷里面的日期對(duì)象的。

Date getTime()

日期的加減與滾動(dòng)

加減

加減很好理解,下面兩個(gè)字段的含義為:

field : 表示加減操作的字段。比如Calendar.Date,表示天,Calendar.YEAR,表示年,還有Calendar.MONTH等等。

amount : 操作的數(shù)目。如果是正數(shù)則表示加,反之則表示減。比如10,則表示加十次。-10則表示減十次。

void add(int field, int amount);

下面這段代碼則表示,當(dāng)前日期加十天。

calendar.add(Calendar.Date , 10);

滾動(dòng)

void roll(int field, int amount);

再說(shuō)滾動(dòng),與add不同,roll方法只操作單個(gè)字段,其字段含義與add相同。注意我的用詞,是只,不是之,不是值,更不是只因。

那什么叫只操作單個(gè)字段呢?比如當(dāng)前日期為11.1號(hào),分別調(diào)用以下方法

add(Calendar.DATE , -1);

日期減一天,此時(shí)日期為 10.31

但調(diào)用

roll(Calendar.DATE , -1);

獲取到的日期為 11.30

看出來(lái)了嗎,add方法是正常的日期加減,而roll的操作是該列滾動(dòng)操作??梢钥醋?strong>設(shè)置鬧鐘時(shí)候的那種滾動(dòng),而且他的部分子類這取決于地區(qū))是不會(huì)有年月日的聯(lián)動(dòng)的。也就造成了上面的情況。

日期的設(shè)置

相較于Date類中只能用毫秒數(shù)設(shè)置日期,Calendar中可以以多種方式設(shè)置時(shí)間。

void setTime(Date date);
void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)

還有以指定的周數(shù)及星期來(lái)設(shè)置時(shí)間等等。

setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)

當(dāng)然還有一些用的其他的方法,這里就不一一列舉了。

測(cè)試實(shí)例代碼

	public class CalendarTest {
    public static void main(String[] args) {
        //根據(jù)地區(qū)獲取對(duì)應(yīng)的Calender-日歷 默認(rèn)為當(dāng)前時(shí)間,值得注意的是這里的獲取實(shí)例
        // 用的很明顯的提供者模式
        Calendar calendar = Calendar.getInstance();
        //get方法的返回值為int 不同的參數(shù)對(duì)應(yīng)不同的值
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        System.out.println("月:" + calendar.get(Calendar.MONTH));
        System.out.println("日:" + calendar.get(Calendar.DATE));
        System.out.println("時(shí)(12小時(shí)制):" + calendar.get(Calendar.HOUR));
        System.out.println("時(shí)(24小時(shí)制):" + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("分:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));
        // 日期與天
        // 這里需要注意的是星期里面 周日的為1 周一為2 周二為3 以此類推 所以這里要減一
        System.out.println("今天是這周第幾天:" + (calendar.get(Calendar.DAY_OF_WEEK) - 1));
        System.out.println("今天是這個(gè)月第幾天:" + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("今天是今年第幾天::" + calendar.get(Calendar.DAY_OF_YEAR));
        //日期與周
        System.out.println("現(xiàn)在是這月第幾周:" + calendar.get(Calendar.WEEK_OF_MONTH));
        System.out.println("現(xiàn)在是今年第幾周:" + calendar.get(Calendar.WEEK_OF_YEAR));
        //表示當(dāng)前時(shí)間是在上午還是在下午 0 - 上午(午夜到正午) 1-下午
        System.out.println("上午:" + calendar.get(Calendar.AM_PM));

        System.out.println("===================日期的設(shè)置=======================");
        //設(shè)置日期為2022年1月1號(hào) 精確到天
        calendar.set(2022 , Calendar.JANUARY , 1);
        //設(shè)置為 2022-2-1 10:12 精確到分
        calendar.set(2022 , Calendar.FEBRUARY , 1 , 10 , 12);
        //設(shè)置為 2022-3-1 10:12:1 日期 精確到秒
        calendar.set(2022 , Calendar.MAY , 1 , 10, 10,1);
        System.out.println("設(shè)置后的時(shí)間:"  + calendar.getTime().toString());
        calendar.clear();
        //還可以指定年、周數(shù)來(lái)設(shè)置日期為 這里是設(shè)置日期為 2022年的第1周的周三
        calendar.setWeekDate(2022 , 1, Calendar.WEDNESDAY);
        //這里需要注意 如果2022.1.1號(hào)是周六 那么之前周一到周五也算第一周 即使它們?cè)?021年里
        //這也就解釋了為什么2022年第一周周三的日期為2021-12-29
        System.out.println("2022年的第1周的周三: " + calendar.getTime().toString());

        System.out.println("===================日期的改變=======================");
        //日期的改變
        calendar.clear();//設(shè)置時(shí)間為2022-11-1
        calendar.set(2022 , Calendar.NOVEMBER , 1);
        System.out.println("當(dāng)前時(shí)間:" + calendar.getTime().toString());
        //日期的滾動(dòng) 只操作單列而不影響其他的信息
        calendar.roll(Calendar.DATE , -1);//正數(shù)為向上滾(+) 負(fù)數(shù)為向下滾(-)
        System.out.println("向下滾動(dòng)一天的時(shí)間(11-30):" + calendar.getTime().toString());
        //日期的加減 前一個(gè)參數(shù)為操作的類型 后一個(gè)參數(shù)為改變的數(shù)量
        calendar.clear();//設(shè)置時(shí)間為2022-11-1
        calendar.set(2022 , Calendar.NOVEMBER , 1);
        calendar.add(Calendar.DATE , -1);
        System.out.println("當(dāng)前時(shí)間減去一天為(10-31):" + calendar.getTime().toString());
        //加一天
        calendar.add(Calendar.DATE , 1);
        System.out.println("再減一天為:" + calendar.getTime().toString());

        System.out.println("===================一些信息的設(shè)置=======================");
        //獲取字段對(duì)應(yīng)最大的值
        System.out.println("一年中天數(shù)最大可能為:" + calendar.getMaximum(Calendar.DAY_OF_YEAR));
        System.out.println("星期最大為:" + calendar.getMaximum(Calendar.DAY_OF_WEEK));
        System.out.println("一月天數(shù)最大為:" + calendar.getMaximum(Calendar.DAY_OF_MONTH));

    }
}

DateFormat與SimpleDateFormat

DateFormat

是一個(gè)抽象類,其實(shí)這個(gè)類有點(diǎn)雞肋,你別看名字叫做日期格式化。但其實(shí)它只能轉(zhuǎn)換和處理固定的格式日期。跳過(guò)不看也是可以的。

值得注意的是,該類的屬性種包含一個(gè)Calendar。我們后面講到的SimpleDateFormatDateFormat的子類,所以需要注意一下。

比如將一個(gè)Date轉(zhuǎn)換為String,或者String轉(zhuǎn)換為Date。固定格式為:xx-xx-xx。比如2022-11-1。

常用方法

這里來(lái)認(rèn)識(shí)兩個(gè)種方法:日期轉(zhuǎn)字符的format以及與之相反的parse

日期轉(zhuǎn)字符

這其中fieldPosition參數(shù)的我會(huì)在測(cè)試示例里具體說(shuō)明

StringBuffer format(Date date, StringBuffer toAppendTo,FieldPosition fieldPosition);
String format(Date date);

字符轉(zhuǎn)日期

這其中pos參數(shù)的我會(huì)在測(cè)試示例里具體說(shuō)明

Date parse(String source);
Date parse(String source, ParsePosition pos);

測(cè)試實(shí)例

public class DateFormatTest {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        //獲取一個(gè)實(shí)例 跟Calendar一樣使用的是提供者模式
        DateFormat dateFormat = DateFormat.getDateInstance();

        System.out.println("處理字符轉(zhuǎn)為日期1:" + dateFormat.parse("2022-10-1").toString());
        //將字符串處理為日期 只支持 xx-xx-xx 這種格式 且無(wú)法精確到時(shí)分秒
        ParsePosition pos = new ParsePosition(1);//從第1位 0開(kāi)始將字符轉(zhuǎn)換為日期
        System.out.println("處理字符轉(zhuǎn)為日期2:" + dateFormat.parse("2022-10-11", pos).toString());


        //格式化日期1 默認(rèn)格式為 2022-11-3 這種
        System.out.println(dateFormat.format(date));
        //格式化日期2
        StringBuffer stringBuffer = new StringBuffer();
        //參數(shù)分別為 日期、用于輸出的StringBuffer、指定的跟蹤字段
        // 跟蹤字段 - MONTH_FIELD 指向的是月份的位置
        FieldPosition fieldPosition = new FieldPosition(DateFormat.MONTH_FIELD);
        dateFormat.format(date , stringBuffer , fieldPosition);
        System.out.println("日期轉(zhuǎn)為字符: :" + stringBuffer);
        //獲取指定字段的索引信息
        int begin = fieldPosition.getBeginIndex();
        int end = fieldPosition.getEndIndex();
        System.out.println("指定字段在StringBuffer中的開(kāi)始索引:" + begin);
        System.out.println("指定字段在StringBuffer中結(jié)束索引:" + end);
        String fieldValue = "";
        for(int i = begin; i < end; i++) {
            fieldValue = fieldValue +  stringBuffer.charAt(i);
        }
        System.out.println("指定字段(月份)的值為:" + fieldValue);
    }
}

SimpleDateFormat

該類是DateFormat的子類。主要用于日期的處理和格式化。相較于它的父類,它的功能更多,也更加便捷,更符合用戶的使用習(xí)慣。

主要方法

獲取實(shí)例

相較于抽象類(Calendar、DateFormat)使用的提供者模式獲取實(shí)例,現(xiàn)在我們可以直接new一個(gè)對(duì)象了。該類主要就是這一步。

SimpleDateFormat();//默認(rèn)格式為22-11-4 上午10:36
SimpleDateFormat(String pattern);//指定格式
SimpleDateFormat(String pattern, Locale locale);//指定格式 指定地區(qū)
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)//指定地區(qū)、指定日期符號(hào)

這里的格式我要強(qiáng)調(diào)一下,各字母代表的含義如下

(注意以下數(shù)據(jù)的轉(zhuǎn)換跟地區(qū)有關(guān)-Local類,不同的地區(qū)顯示不同,比如我們顯示MM顯示為11,但其他地區(qū)可能是Nov來(lái)表示月份)

字母說(shuō)明
y年份yyyy表示四位數(shù)年份,如2022
M月份MM表示當(dāng)前月,如11
m分鐘mm表示分鐘,如10
d本月天數(shù)dd表示本月天數(shù),如04
D今年天數(shù)D表示今年天數(shù),如185
E星期E表示星期,如星期三
h12小時(shí)制hh表示小時(shí)(0-12),如10
H24小時(shí)制HH表示小時(shí)(0-24),如18
sss表示兩位秒數(shù),如02
S毫秒SSS表示三位毫秒數(shù),588
a時(shí)段a表示上午或者下午,如上午

當(dāng)然還有一部分字母,如:L、k、z、x、F、U等等用的比較少的就不再列舉了,有興趣自行了解。

常用的格式

下面我會(huì)列舉一下比較常用的格式。

不帶毫秒格式

yyyy-MM-dd HH:mm:ss

2022-11-04 10:07:26

帶毫秒的

yyyy-MM-dd HH:mm:ss.SSS

2022-11-04 10:07:26.729

帶年月日

yyyy年MM月dd日 HH:mm:ss

2022年11月04日 10:20:32

帶年月日 星期 上午

yyyy年MM月dd日 E a HH:mm:ss

2022年11月04日 星期五 上午 10:20:32

橫杠帶星期

yyyy-MM-dd E HH:mm:ss

2022-11-04 星期五 10:11:10

橫杠帶 星期 時(shí)段

yyyy-MM-dd E a HH:mm:ss

2022-11-04 星期五 上午 10:17:02

無(wú)分隔符 精確到秒 一般用于作為生成文件的文件名稱

yyyyMMddHHmmss

20221104101110

精確到毫秒

yyyyMMddHHmmssSSS

20221104101110136

左斜杠格式

yyyy/MM/dd HH:mm:ss

2022/11/04 10:11:10

左斜杠帶毫秒

yyyy/MM/dd HH:mm:ss.SSS

2022/11/04 10:11:10.136

左斜杠帶星期

yyyy/MM/dd E HH:mm:ss

2022/11/04 星期五 10:11:10

日期轉(zhuǎn)為字符串

照樣來(lái)看,日志轉(zhuǎn)為字符的format(格式化)方法

String format(Date date);

StringBuffer format(Date date, StringBuffer toAppendTo
,Position pos);//參考DateFormat

StringBuffer format(Date date, StringBuffer toAppendTo,
FieldDelegate delegate);//跟上面的差不多只是做了一個(gè)字段替換

void subFormat(int patternCharIndex, int count,
FieldDelegate delegate, StringBuffer buffer,
boolean useDateFormatSymbols)//真正的格式化日期方法

其實(shí)實(shí)際應(yīng)用中,我們基本只會(huì)用到第一個(gè)方法。

字符串轉(zhuǎn)日期

同上 基本只用一個(gè)parse方法

Date parse(String source) throws ParseException;

測(cè)試示例

public class SimpleDateFormatTest {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        System.out.println("默認(rèn)格式化日期:" + simpleDateFormat.format(date));
        //自己設(shè)置的格式
        simpleDateFormat.applyPattern("yyyy-MM-dd hh:mm:ss.SSS");
        System.out.println("自己設(shè)置的格式:" + simpleDateFormat.format(date));

        Date date1 = simpleDateFormat.parse("2022-11-03 10:49:06.973");
        System.out.println("指定字符串轉(zhuǎn)為日期對(duì)象:" + date1.toString());

        System.out.println("====================================");
        simpleDateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyyMMddHHmmss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyyMMddHHmmssSSS");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy/MM/dd HH:mm:ss.SSS");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy/MM/dd E HH:mm:ss.SSS");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy-MM-dd E HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy-MM-dd E a HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        simpleDateFormat.applyPattern("yyyy年MM月dd日 E a HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
    }
}

編寫一個(gè)簡(jiǎn)單的日期工具類

工具類

package com.date;

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

/**
 * @author 三文魚(yú)先生
 * @title
 * @description
 * @date 2022/11/4
 **/
public class DateUtil {
    //常用的日期格式
    //這里可以考慮用一個(gè)List把單元字符組合起來(lái) 用的時(shí)候再去拼接
    public static final String SecondPattern = "yyyy-MM-dd HH:mm:ss";
    public static final String yyyyMMddHHmmss = "yyyyMMddHHmmss";
    public static final String MillisecondPattern = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
    public static final String WeekSecond = "yyyy-MM-dd E HH:mm:ss";
    public static final String WeekIntervalSecond = "yyyy-MM-dd E a HH:mm:ss";
    public static final String YMDChinese = "yyyy年MM月dd日 HH:mm:ss";
    public static final String SlashSecond = "yyyy/MM/dd HH:mm:ss";
    public static final String SlashWeekSecond = "yyyy/MM/dd E HH:mm:ss";
    public static final String SlashWeekIntervalSecond = "yyyy/MM/dd E a HH:mm:ss";
    //只用于獲取星期
    public static final String[] weeks = {"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
    //主要的格式化功能類
    private static final SimpleDateFormat format = new SimpleDateFormat(SecondPattern);
    //主要的日期操作類
    private static Calendar calendar = null;

    /**
     * @description 根據(jù)日期獲取指定天數(shù)前的日期
     * @author 三文魚(yú)先生
     * @date 17:07 2022/11/4
     * @param date 日期
     * @param amount 天數(shù) 正數(shù)為加 負(fù)數(shù)未減
     * @return java.util.Date
     **/
    public static Date getDateWithDay(Date date , int amount) {
       return operateDate(date , Calendar.DATE , amount);
    }

    /**
     * @description 獲取七天前的時(shí)間
     * @author 三文魚(yú)先生
     * @date 17:08 2022/11/4
     * @param date 日期
     * @return java.util.Date
     **/
    public static Date getDateWithSevenDays(Date date) {
        return operateDate(date , Calendar.DATE , -6);
    }

    /**
     * @description 以指定參數(shù)操作當(dāng)前時(shí)間 可以加減
     * @author 三文魚(yú)先生
     * @date 17:09 2022/11/4
     * @param date 操作的日期
     * @param field 操作的時(shí)間字段 比如Calendar.DATE、Calendar.YEAR等
     * @param amount 操作的數(shù)量 正數(shù)為加 負(fù)數(shù)未減
     * @return java.util.Date
     **/
    public static Date operateDate(Date date ,int field , int amount) {
        if(calendar == null)
            calendar = format.getCalendar();
        else
            calendar.clear();
        calendar.setTime(date);
        calendar.add(field , amount);
        return calendar.getTime();
    }

    /**
     * @description 根據(jù)指定的格式從字符串種獲取日期 再進(jìn)行操作
     * @author 三文魚(yú)先生
     * @date 17:11 2022/11/4
     * @param str 日期字符串
     * @param pattern 字符串格式
     * @param field 操作的字段 比如Calendar.DATE、Calendar.YEAR等
     * @param amount 操作的數(shù)量
     * @return java.util.Date
     **/
    public static Date operateDateWithString(String str , String pattern, int field , int amount) {
        if(calendar == null)
            calendar = format.getCalendar();
        else
            calendar.clear();
        calendar.setTime(parseStr(str , pattern));
        calendar.add(field , amount);
        return calendar.getTime();
    }

    /**
     * @description 獲取日期中的星期
     * @author 三文魚(yú)先生
     * @date 17:13 2022/11/4
     * @param date 日期
     * @return java.lang.String
     **/
    public static String getWeekFromDate(Date date) {
        if(calendar == null)
            calendar = format.getCalendar();
        else
            calendar.clear();
        calendar.setTime(date);
        return weeks[calendar.get(Calendar.DAY_OF_WEEK) - 1];
    }

    /**
     * @description 以默認(rèn)的格式將日期轉(zhuǎn)為字符串
     * @author 三文魚(yú)先生
     * @date 17:13 2022/11/4 
     * @param date 日期
     * @return java.lang.String
     **/
    public static String formatStr(Date date) {
        return format.format(date);
    }

    /**
     * @description 以指定的日期和格式 獲取字符串
     * @author 三文魚(yú)先生
     * @date 17:14 2022/11/4
     * @param date 日期
     * @param pattern 日期格式
     * @return java.lang.String
     **/
    public static String formatStr(Date date, String pattern) {
        if(!pattern.equals(format.toPattern())) {
            format.applyPattern(pattern);
        }
        return format.format(date);
    }

    /**
     * @description 以默認(rèn)的格式接受字符串 轉(zhuǎn)為日期
     * @author 三文魚(yú)先生
     * @date 17:15 2022/11/4
     * @param str 日期字符串
     * @return java.util.Date
     **/
    public static Date parseStr(String str) {
       return parseStr(str , SecondPattern);
    }

    /**
     * @description 以指定的格式從字符串里獲取日期
     * @author 三文魚(yú)先生
     * @date 17:15 2022/11/4 
     * @param str 日期字符串
     * @param pattern 日期格式
     * @return java.util.Date
     **/
    public static Date parseStr(String str, String pattern) {
        if(!pattern.equals(format.toPattern())) {
            format.applyPattern(pattern);
        }
        Date date = null;
        try {
            date = format.parse(str);
        }  catch (ParseException parseException) {
            parseException.printStackTrace();
        }
        return date;
    }
}

測(cè)試示例

package com.date;

import java.util.Calendar;
import java.util.Date;

/**
 * @author 三文魚(yú)先生
 * @title
 * @description
 * @date 2022/11/4
 **/
public class UtilTest {
    public static void main(String[] args) {
        System.out.println("以默認(rèn)格式獲取當(dāng)前時(shí)間字符串:" + DateUtil.formatStr(new Date()));
        System.out.println("以指定格式獲取當(dāng)前時(shí)間字符串:" + DateUtil.formatStr(new Date() , DateUtil.WeekSecond));
        //以指定格式從字符中獲取日期對(duì)象 自行選擇要用的數(shù)據(jù)
        Date date1 = DateUtil.parseStr("2022-11-04 16:28:07");
        System.out.println("以默認(rèn)格式從字符串中獲取的日期對(duì)象:" +  DateUtil.formatStr(date1));
        Date date2 = DateUtil.parseStr("2022年11月04日 16:28:07" , DateUtil.YMDChinese);
        System.out.println("以指定格式從字符串中獲取的日期對(duì)象:" + DateUtil.formatStr(date2 , DateUtil.YMDChinese));
        System.out.println("獲取日期中的星期 今天是:" + DateUtil.getWeekFromDate(new Date()));

        //日期的加減
        System.out.println("================日期的加減====================");
        Date date4 = new Date();
        System.out.println("現(xiàn)在的日期是:" + DateUtil.formatStr(date4 , DateUtil.WeekSecond));
        Date date3 = DateUtil.getDateWithDay(date4, -1);
        System.out.println("昨天的日期為:" + DateUtil.formatStr(date3 ,  DateUtil.WeekSecond));
        System.out.println("一周前的日期為:" + DateUtil.formatStr(DateUtil.getDateWithSevenDays(date4) , DateUtil.WeekSecond));
        System.out.println("去年今天的日期為:" + DateUtil.formatStr(DateUtil.operateDate(date4 , Calendar.YEAR , -1)));
        Date date5 = DateUtil.operateDateWithString("2022-11-04 16:28:07" , DateUtil.SecondPattern , Calendar.DATE , -1);
        System.out.println("以字符串形式操作日期減去一天:" + DateUtil.formatStr(date5 , DateUtil.SecondPattern));
    }
}

總結(jié)

就是理一下Date、Calendar、DateFormat三者之間的關(guān)系。

 

到此這篇關(guān)于Java中常用的日期類的文章就介紹到這了,更多相關(guān)Java常用日期類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論