java工作日,Java工作日全部列出來

本文目錄一覽:

java根據年月獲取對應的月份工作日天數

import java.util.Calendar;

public class Main {

    public static void main(String[] args) {

        System.out.println(countWorkDay(2018, 6));

    }

    /**

     * 獲取指定年月有多少個工作日)

     *

     * @param year

     * @param month

     * @return

     */

    public static int countWorkDay(int year, int month) {

        Calendar c = Calendar.getInstance();

        c.set(Calendar.YEAR, year);

        // 月份是從0開始計算,所以需要減1

        c.set(Calendar.MONTH, month – 1);

        // 當月最後一天的日期

        int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);

        // 開始日期為1號

        int start = 1;

        // 計數

        int count = 0;

        while (start = max) {

            c.set(Calendar.DAY_OF_MONTH, start);

            if (isWorkDay(c)) {

                count++;

            }

            start++;

        }

        return count;

    }

    // 判斷是否工作日(未排除法定節假日,由於涉及到農曆節日,處理很麻煩)

    public static boolean isWorkDay(Calendar c) {

        // 獲取星期,1~7,其中1代表星期日,2代表星期一 … 7代表星期六

        int week = c.get(Calendar.DAY_OF_WEEK);

        // 不是周六和周日的都認為是工作日

        return week != Calendar.SUNDAY  week != Calendar.SATURDAY;

    }

}

有關java中工作日演算法的問題

Calendar c = new GregorianCalendar();

int i=0;

while(i3){

c.add(Calendar.DATE, 1);

if (isHoliday(c.getTime())) continue;

if (isWeekEnd(c.getTime()) !isTransferAsWorkDay(c.getTime())) continue;

i++;

}

return c.getTime();

isHoliday() :是否為節假日

isWeekEnd()是否為周末

isTransferAsWorkDay()是否周末轉為工作日

這3個需要自己寫

如何用java代碼判斷工作日

可以用Calendar類,但只能判斷是周末還是工作日。

公假和補假是不可能有現成的方法給你寫出來的,java是老外發明的,人家老外那可沒什麼國慶,中秋的,所以這些只能你自己來判斷,你自己寫演算法,

而且這肯定不是一個簡單的問題,需要很多數據和工作量,因為你這個需求實現了,都可以做一個「中國工作日及假修列表」系統了。

java如何計算工作日之間的時間差

package com.wednesday.tools.timetools;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class GetWorkDayTimeMillisecond {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

GetWorkDayTimeMillisecond a = new GetWorkDayTimeMillisecond();

Long b=a.getWorkdayTimeInMillis(“2010-05-17 8-00-00”, “2010-05-18 9-00-00”, “yyyy-MM-dd HH-mm-ss”);

System.out.println(b);

}

/**

* 獲取兩個時間之內的工作日時間(只去掉兩個日期之間的周末時間,法定節假日未去掉)

* @param start -起始時間,共有3個重載方法,可以傳入long型,Long型,與Date型

* @param end -結束時間,共有3個重載方法,可以傳入long型,Long型,與Date型

* @return Long型時間差對象

*/

public Long getWorkdayTimeInMillis(long start, long end){

//如果起始時間大於結束時間,將二者交換

if(startend){

long temp = start;

start = end;

end = temp;

}

//根據參數獲取起始時間與結束時間的日曆類型對象

Calendar sdate = Calendar.getInstance();

Calendar edate = Calendar.getInstance();

sdate.setTimeInMillis(start);

edate.setTimeInMillis(end);

//如果兩個時間在同一周並且都不是周末日期,則直接返回時間差,增加執行效率

if(sdate.get(Calendar.YEAR)==edate.get(Calendar.YEAR)

 sdate.get(Calendar.WEEK_OF_YEAR)==edate.get(Calendar.WEEK_OF_YEAR)

 sdate.get(Calendar.DAY_OF_WEEK)!=1  sdate.get(Calendar.DAY_OF_WEEK)!=7

 edate.get(Calendar.DAY_OF_WEEK)!=1  edate.get(Calendar.DAY_OF_WEEK)!=7){

return new Long(end-start);

}

//首先取得起始日期與結束日期的下個周一的日期

Calendar snextM = getNextMonday(sdate);

Calendar enextM = getNextMonday(edate);

//獲取這兩個周一之間的實際天數

int days = getDaysBetween(snextM, enextM);

//獲取這兩個周一之間的工作日數(兩個周一之間的天數肯定能被7整除,並且工作日數量占其中的5/7)

int workdays = days/7*5;

//獲取開始時間的偏移量

long scharge = 0;

if(sdate.get(Calendar.DAY_OF_WEEK)!=1  sdate.get(Calendar.DAY_OF_WEEK)!=7){

//只有在開始時間為非周末的時候才計算偏移量

scharge += (7-sdate.get(Calendar.DAY_OF_WEEK))*24*3600000;

scharge -= sdate.get(Calendar.HOUR_OF_DAY)*3600000;

scharge -= sdate.get(Calendar.MINUTE)*60000;

scharge -= sdate.get(Calendar.SECOND)*1000;

scharge -= sdate.get(Calendar.MILLISECOND);

}

//獲取結束時間的偏移量

long echarge = 0;

if(edate.get(Calendar.DAY_OF_WEEK)!=1  edate.get(Calendar.DAY_OF_WEEK)!=7){

//只有在結束時間為非周末的時候才計算偏移量

echarge += (7-edate.get(Calendar.DAY_OF_WEEK))*24*3600000;

echarge -= edate.get(Calendar.HOUR_OF_DAY)*3600000;

echarge -= edate.get(Calendar.MINUTE)*60000;

echarge -= edate.get(Calendar.SECOND)*1000;

echarge -= edate.get(Calendar.MILLISECOND);

}

//計算最終結果,具體為:workdays加上開始時間的時間偏移量,減去結束時間的時間偏移量

return workdays*24*3600000+scharge-echarge;

}

public Long getWorkdayTimeInMillis(Long start, Long end){

return getWorkdayTimeInMillis(start.longValue(), end.longValue());

}

public Long getWorkdayTimeInMillis(Date start, Date end){

return getWorkdayTimeInMillis(start.getTime(), end.getTime());

}

public Long getWorkdayTimeInMillis(String start, String end, String format){

SimpleDateFormat sdf = new SimpleDateFormat(format);

Date sdate;

Date edate;

try {

sdate = sdf.parse(start);

edate = sdf.parse(end);

return getWorkdayTimeInMillis(sdate, edate);

} catch (ParseException e) {

e.printStackTrace();

return new Long(0);

}

}

private Calendar getNextMonday(Calendar cal){

int addnum=9-cal.get(Calendar.DAY_OF_WEEK);

if(addnum==8)addnum=1;//周日的情況

cal.add(Calendar.DATE, addnum);

return cal;

}

/**

* 獲取兩個日期之間的實際天數,支持跨年

*/

public int getDaysBetween(Calendar start, Calendar end){

if(start.after(end)){

Calendar swap = start;

start = end;

end = swap;

}

int days = end.get(Calendar.DAY_OF_YEAR)- start.get(Calendar.DAY_OF_YEAR);

int y2 = end.get(Calendar.YEAR);

if (start.get(Calendar.YEAR) != y2) {

start = (Calendar) start.clone();

do {

days += start.getActualMaximum(Calendar.DAY_OF_YEAR);

start.add(Calendar.YEAR, 1);

}while(start.get(Calendar.YEAR) != y2);

}

return days;

}

}

求java實現工作日方法

import java.text.DateFormat;

import java.text.ParseException;

import java.text.ParsePosition;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.Scanner;

public class Test9 {

/**

* 第9題:編寫程序,該程序啟動後用戶可以按「yyyy-MM-dd」的格式輸入一個日期,程序計算這一天是星期幾,並且計算出是一年中的第幾天。

*

* @param args

* @throws ParseException

*/

public static void main(String[] args) throws ParseException {

Scanner scan = new Scanner(System.in);

System.out.println(“請輸入日期(格式為yyyy-mm-dd):”);

String input = scan.next();

DateFormat format = DateFormat.getDateInstance();

Date date = format.parse(input);

Calendar ca = Calendar.getInstance();

ca.setTime(date); //設置輸入時間

int xingqi = ca.get(Calendar.DAY_OF_WEEK);//獲得輸入日期是星期幾?

System.out.println(“您輸入的日期是:”+input);

System.out.println(“這一天是”+ GetWeek(xingqi));

System.out.println(“這一天是這年的第”+ ca.get(Calendar.DAY_OF_YEAR)+”天”);

}

public static String GetWeek(int i)

{

if(i0||i7){

System.out.println(i+”沒有對應的星期”);

}

String[] weeks={“”,”星期日”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”};

return weeks[i];

}

}

原創文章,作者:YRQMA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324418.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YRQMA的頭像YRQMA
上一篇 2025-01-13 13:22
下一篇 2025-01-13 13:23

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論