C語言中文網 目錄

Java日期查詢

本實例使用有關日期處理和日期格式化的類實現一個日期查詢的功能,即查詢指定日期所在周的周一日期、兩個指定日期間相差的天數和指定日期為所在周的星期幾的日期 3 個功能。

從功能上來看,本實例至少需要定義 3 個方法,分別完成:獲取指定日期所在周的周一日期、獲取兩個指定日期的相差天數以及獲取指定日期為所在周的星期幾的日期這 3 個功能,同時需要定義 Date 類型的日期與 String 類型之間的轉換方法。

(1) 新建 Exercise 類,在該類中導入需要的包。代碼如下:
import java.text.Parse Exception;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Exercise
{
    //在該類中有5個方法,在下面的步驟中將會講解,這里省略
}

(2) 在 Exercise 類中定義獲取指定日期所在周的周一日期的方法——getMonday(),該方法是一個靜態方法,返回值為 String 類型,并且需要傳遞一個 Date 類型的參數,然后將該日期參數作為 Calendar 對象的日期,并調用 Calendar 類的 set(int field,int value)方法改變 Calendar 對象中的日期,再將使用 SimpleDateFormat 類格式化后的日期返回。

getMonday() 方法的代碼實現如下:
//獲取指定日期所在周的周一日期
public static String getMonday(Date date)
{
    Calendar c=Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
    return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}

(3) 繼續在 Exercise 類中定義獲取兩個日期間相差天數的方法——getTwoDay(),該方法需要傳遞兩個 String 類型的參數。

在該方法的主體中,首先需要創建一個 SimpleDateFormat 類對象,并指定日期的格式,然后需要調用 SimpleDateFormat 對象的 parse() 方法,將傳遞過來的兩個 String 類型的日期轉換為 Date 類型,并將這兩個 Date 類型的日期進行運算,得出相差的天數,返回一個 int 類型的變量。

getTwoDay() 方法的代碼實現如下:
//獲取兩個日期間相差的天數
public static int getTwoDay(String sj1, String sj2)
{
    SimpleDateFormat myFormatter=new SimpleDateFormat("yyyy-MM-dd");
    int day=0;
    try
    {
        Date date=myFormatter.parse(sj1);
        Date mydate=myFormatter.parse(sj2);
        //計算兩個日期間相差的天數
        day=(int)((date.getTime()-mydate.getTime())/(24*60*60*1000));
    }
    catch(Exception e)
    {
        return 0;
    }
    return day;
}

(4) 在 Exercise 類中繼續創建兩個靜態方法,分別完成 String 類型的日期與 Date 類型日期的互換功能。代碼如下:
//將String類型的日期轉換為Date類型
public static Date strToDate(String strDate)
{
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date date=null;
    try
    {
        date=sdf.parse(strDate);
    }
    catch(ParseException e)
    {
        e.printStackTrace();
    }
    return date;
}
//將Date類型的日期轉換為String類型
public static String DateToStr(Date date)
{
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    String strDate=sdf.format(date);
    return strDate;
}

(5) 在 Exercise 類中定義獲取指定日期所在周的指定星期的日期方法——getWeek(),該方法需要傳遞兩個 String 類型的參數,其中第一個參數表示指定的日期,第二個參數表示星期幾。

在該方法的主體中,首先調用了 strToDate() 方法,將 String 類型的日期轉換為 Date 類型的日期,并將該日期作為 Calendar 類對象日期,然后判斷傳遞過來的第二個參數的值,使用 Calendar 類中的 set(int field,int value) 方法改變日期,從而將格式化后的日期返回。

getWeek()方法的代碼實現如下:
//獲得一個日期所在周的星期幾的日期,如要找出2011年5月1日所在周的星期一是幾號
//@param sdate所確定的日期形式2011-05-01
//@param num要確定的是周幾(1表示周一,2表示周二)
//@return
public static String getWeek(String sdate, String num)
{
    //再轉換為時間
    Date dd=strToDate(sdate);
    Calendar c=Calendar.getInstance();
    c.setTime(dd);
    int weekNo=Integer.parseInt(num);
    switch (weekNo)
    {
        case 1:
            c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);    //返回星期一所在的日期
            break;
        case 2:
            c.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);    //返回星期二所在的日期
            break;
        case 3:
            c.set(Calendar.DAY_OF_WEEK,Calendar.WEDNESDAY);    //返回星期三所在的日期
            break;
        case 4:
            c.set(Calendar.DAY_OF_WEEK,Calendar.THURSDAY);    //返回星期四所在的日期
            break;
        case 5:
            c.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);    //返回星期五所在的日期
            break;
        case 6:
            c.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY);    //返回星期六所在的曰期
            break;
        case 7:
            c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);    //返回星期曰所在的日期
            break;
    }
    return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}

(6) 創建測試類 Test15,調用 Exercise 類的方法,完成查詢當前日期所在周的周一日期,并獲取本周的周一曰期與當前曰期相差的天數,同時還可以查詢本周中任意星期幾的曰期。代碼實現如下:
package com.common.mxl;
import java.util.Date;
import java.util.Scanner;
import com.common.mxl.Exercise;
public class Test15
{
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        Date date=new Date();
        String monday=Exercise.getMonday(date);
        System.out.print("這周一的日期為【"+monday+"】,");
        String nowStr=Exercise.DateToStr(date);       //將 Date 類型的日期轉換為 String 類型
        int num=Exercise.getTwoDay(nowStr,monday);
        System.out.print("與今天相差【"+num+"】天");
        SyStem.out.println("\n請輸入您要查詢本周星期幾的日期(1表示星期一,2表示星期二…):");
        String weekNo=input.next();       //獲取用戶輸入的星期
        int no=Integer.parseInt(weekNo);
        //將用戶輸入的星期轉換為int類型,以便使用switch語句
        String strWeekNo="";
        switch(no)
        {
            case 1:
                strWeekNo="星期一";
                break;
            case 2:
                strWeekNo="星期二";
                break;
            case 3:
                strWeekNo="星期三";
                break;
            case 4:
                strWeekNo="星期四";
                break;
            case 5:
                strWeekNo="星期五";
                break;
            case 6:
                strWeekNo="星期六";
                break;
            case 7:
                strWeekNo="星期日";
                break;
        }
        System.out.println("本周【"+strWeekNo+"】的日期為:"+Exercise.getWeek(nowStr,weekNo));
    }
}

在本程序中,綜合使用了 Date 類、Calendar 類和 SimpleDateFormat 類完成了時間處理功能。在源碼中,多次使用 Calendar 類的 set(int field,int value) 方法來改變日期,從而獲取用戶查詢的日期。該方法在日期操作方面比較常用,大家需要熟練掌握該方法。

該程序的運行結果如下所示:
這周一的日期為【2018-10-15】,與今天相差【0】天
請輸入您要查詢本周星期幾的日期(1表示星期一,2表示星期二…):
1
本周【星期一】的日期為:2018-10-15

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo