工作时遇到的,随便写了个,欢迎高手点评:
核心代码:
package www.sjjjob.com.date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* 日期公共函数
* @author shenjunjie
* @version [s001, 2010-11-19]
*
* public static final int DAY_OF_WEEK_IN_MONTHget 和 set 的字段数字,指示当前月中的第几个星期。
* 与 DAY_OF_WEEK 字段一起使用时,就可以唯一地指定某月中的某一天。
* 与 WEEK_OF_MONTH 和 WEEK_OF_YEAR 不同,
* 该字段的值并不 取决于 getFirstDayOfWeek() 或 getMinimalDaysInFirstWeek()。
* DAY_OF_MONTH 1 到 7 总是对应于 DAY_OF_WEEK_IN_MONTH 1;8 到 14 总是对应于 DAY_OF_WEEK_IN_MONTH 2,
* 依此类推。DAY_OF_WEEK_IN_MONTH 0 表示 DAY_OF_WEEK_IN_MONTH 1 之前的那个星期。
* 负值是从一个月的末尾开始逆向计数,因此,一个月的最后一个星期天被指定为 DAY_OF_WEEK = SUNDAY,
* DAY_OF_WEEK_IN_MONTH = -1。因为负值是逆向计数的,所以它们在月份中的对齐方式通常与正值的不同。
* 例如,如果一个月有 31 天,那么 DAY_OF_WEEK_IN_MONTH -1 将与 DAY_OF_WEEK_IN_MONTH 5
* 和 DAY_OF_WEEK_IN_MONTH 4 的末尾相重叠。
*/
public class DateUtil
{
private static List <Calendar> holidayList;
private static boolean holidayFlag;
/**
* 计算工作日
* 具体节日包含哪些,可以在HolidayMap中修改
* @param src 日期(源)
* @param adddays 要加的天数
* @exception throws [违例类型] [违例说明]
* @version [s001, 2010-11-19]
* @author shenjunjie
*/
public static Calendar addDateByWorkDay(Calendar src,int adddays)
{
// Calendar result = null;
holidayFlag = false;
for (int i = 0; i < adddays; i++)
{
//把源日期加一天
src.add(Calendar.DAY_OF_MONTH, 1);
holidayFlag =checkHoliday(src);
if(holidayFlag)
{
i--;
}
System.out.println(src.getTime());
}
System.out.println("Final Result:"+src.getTime());
return src;
}
/**
* 校验指定的日期是否在节日列表中
* 具体节日包含哪些,可以在HolidayMap中修改
* @param src 要校验的日期(源)
* @version [s001, 2010-11-19]
* @author shenjunjie
*/
public static boolean checkHoliday(Calendar src)
{
boolean result = false;
if (holidayList == null)
{
initHolidayList();
}
//先检查是否是周六周日(有些国家是周五周六)
if (src.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| src.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
{
return true;
}
for (Calendar c : holidayList)
{
if (src.get(Calendar.MONTH) == c.get(Calendar.MONTH)
&& src.get(Calendar.DAY_OF_MONTH) == c.get(Calendar.DAY_OF_MONTH))
{
result = true;
}
}
return result;
}
/**
* 初始化节日List,如果需要加入新的节日,请在这里添加
* 加的时候请尽量使用Calendar自带的常量而不是魔鬼数字
* 注:年份可以随便写,因为比的时候只比月份和天
* @version [s001, 2010-11-19]
* @author shenjunjie
*/
private static void initHolidayList()
{
holidayList = new ArrayList();
//五一劳动节
Calendar may1 = Calendar.getInstance();
may1.set(Calendar.MONTH,Calendar.MAY);
may1.set(Calendar.DAY_OF_MONTH,1);
holidayList.add(may1);
Calendar may2 = Calendar.getInstance();
may2.set(Calendar.MONTH,Calendar.MAY);
may2.set(Calendar.DAY_OF_MONTH,2);
holidayList.add(may2);
Calendar may3 = Calendar.getInstance();
may3.set(Calendar.MONTH,Calendar.MAY);
may3.set(Calendar.DAY_OF_MONTH,3);
holidayList.add(may3);
Calendar h3 = Calendar.getInstance();
h3.set(2000, 1, 1);
holidayList.add(h3);
Calendar h4 = Calendar.getInstance();
h4.set(2000, 12, 25);
holidayList.add(h4);
//中国母亲节:五月的第二个星期日
Calendar may5 = Calendar.getInstance();
//设置月份为5月
may5.set(Calendar.MONTH,Calendar.MAY);
//设置星期:第2个星期
may5.set(Calendar.DAY_OF_WEEK_IN_MONTH,2);
//星期日
may5.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
// System.out.println(may5.getTime());
holidayList.add(may5);
}
}
下面是JUnit4的测试代码:
package www.sjjjob.com.date;
import java.util.Calendar;
import junit.framework.Assert;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class DateUtilTest
{
@Test
public void testAddDateByWorkDay()
{
Calendar src = Calendar.getInstance();
src.set(2010, Calendar.APRIL , 29);
Calendar result = DateUtil.addDateByWorkDay(src, 2);
Calendar expected = Calendar.getInstance();
expected.set(2010, Calendar.MAY , 4);
Assert.assertEquals(expected.getTime().toString(), result.getTime().toString());
}
@Test
public void testAddDateByWorkDay2()
{
//测试母亲节
Calendar src = Calendar.getInstance();
src.set(2010, Calendar.MAY , 7);
Calendar result = DateUtil.addDateByWorkDay(src, 2);
Calendar expected = Calendar.getInstance();
expected.set(2010, Calendar.MAY , 11);
Assert.assertEquals(expected.getTime().toString(), result.getTime().toString());
}
}
分享到:
相关推荐
网上排除节假日、周六周日 获取相差时间 分为四种情况, 精确到天 此工具类在此基础之上进行优化, 分为俩种情况, 精确到分钟,保留俩位小数 (精确到秒 需自己加工下) 入口方法: getWorkHours
//计算15个工作日之后的工作日日期 Date date = workdayUtils.getWorkday(new Date(), 15); //计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));
在Java中,要计算一个月内有多少个工作日(通常指周一至周五),以及具体哪些日子是工作日,可以通过多种方法实现。这里将介绍一种较为通用的方法:利用`java.util.Calendar`类来计算指定月份内的工作日。 #### 一...
通过以上步骤,我们可以构建一个功能完善的工作日计算系统,能够精确地计算出两个日期之间的工作日数量,同时考虑到了法定节假日的影响。这个过程涉及了文件读取、日期时间处理和自定义逻辑的实现,是Java开发中的一...
本文将详细介绍一个Java程序中的实用工具类——`WeekUtil`,该类主要用于处理与周相关的各种计算问题,如确定某个日期所在的周数、获取指定周的第一天和最后一天等。这对于需要根据日期进行周统计的应用场景非常有用...
java代码先获取全年的周末周日,定义全年的法定节假日,然后根据输入的日期计算,当前日期后的工作日,也可以用于计算工作日
使用Java语言进行计算除去周六周日日期、节日假期的应该工作的工作日日数!项目实战中写的,里面有很详细的注释,不用担心看不懂!
android java日期计算工具
首先,DateToDate 类中有一个静态方法 getContainVacation,该方法的作用是计算在给定的日期范围内包含假期的天数。如果在这个日期范围内不包含假期,则返回 0。这个方法的实现过程是通过遍历假期列表,检查每个假期...
2. **JDatePicker**: 这是SwingX库中的一个组件,它提供了一个简单的日期选择界面,包括一个日期模型和一个可定制的日期格式器。用户可以点击一个文本框旁边的图标来打开日期选择对话框,选择日期后,文本框会自动...
通过上述步骤,我们可以在Java中实现一个基于日期和流水号的订单号生成器。对于提供的`java订单号(时间加流水号).txt`文件,可能包含了具体的代码实现或使用示例,你可以查阅该文件以获取更详细的实现细节。在实际...
### Java FTP 指定下载文件和上传文件到指定的服务器目录 #### 一、概述 在本篇文章中,我们将详细介绍如何使用Java编程语言通过FTP(文件传输协议)实现文件的上传与下载功能,并能够将文件指定上传或下载到特定...
曲线拟合是数学建模中的一个重要概念,它用于通过数学函数来近似描述一组数据点的趋势,以便于分析数据、预测结果或者简化复杂的计算过程。Java作为一种通用的编程语言,提供了丰富的库和工具来实现曲线拟合。在这个...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 ...
考试内容: 一、 Java语言的特点和实现机制 二、 Java体系结构 1. JDK目录结构。 2. Java的API结构。 3. 开发环境设置。 4. Java程序结构。 三、 Java语言中面向对象的特性。 1. 面向对象编程的基本要领和特征。 2. ...
这个小游戏旨在为初学者提供一个实践Java编程、图形用户界面(GUI)设计以及动画制作的平台,同时也为有经验的开发者提供了一种有趣的编程挑战。 在Java中实现数字彩虹雨的关键技术包括: 1. **Java基础**:首先,...
根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! toString()方法输出阴历日期(例如:癸巳年七月...
本示例简单的实现了一个用Java代码来访问FTP,根据指定FTP的目录,访问这个路径下面的Ftp的文件,取出这个目录下面所有文件的文件名保存到一个Map中,最后根据系统时间和文件生成时间做对比,得出该日是否正确生成...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...