| | |
| | | <version>2.7.1</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.icexxx</groupId> |
| | | <artifactId>iceworkday</artifactId> |
| | | <version>2.0.2.0</version> |
| | | </dependency> |
| | | |
| | | |
| | | <dependency> |
| | | <groupId>cn.afterturn</groupId> |
| | |
| | | import com.dg.core.file.MimeTypeUtils; |
| | | import com.dg.core.file.SFTPUtil; |
| | | import com.dg.core.util.TestDate; |
| | | import com.iceyyy.workday.WorkUtils; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.InputStream; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | |
| | | /** |
| | | * 判断当前时间是否是工作日,格式为“2022-10-16”,不传默认为今天 |
| | | */ |
| | | @ApiOperation("判断当前时间是否是工作日,格式为“2022-10-16”,不传默认为今天") |
| | | @ApiOperation("判断当前时间是否是工作日,格式为“20221016”,不传默认为今天") |
| | | @GetMapping("/isWeekday") |
| | | public ResultData isWeekday(@RequestParam(value = "dateTime",required = false) String dateTime) |
| | | { |
| | | TestDate td=new TestDate(); |
| | | DateTime dateTimeUser; |
| | | if (dateTime==null) |
| | | dateTimeUser=DateTime.now(); |
| | | else{ |
| | | dateTimeUser=DateUtil.parse(dateTime); |
| | | if (dateTime==null){ |
| | | Date date = new Date(); |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); |
| | | dateTime = fmt.format(date); |
| | | } |
| | | if (td.isWeekday(dateTimeUser)) |
| | | return success("工作日"); |
| | | else |
| | | if (WorkUtils.isWorkendDay(dateTime)) |
| | | return success("休息日或者周末"); |
| | | else |
| | | return success("工作日"); |
| | | } |
| | | |
| | | |
| | |
| | | import com.dg.core.util.Snowflake; |
| | | import com.dg.core.util.TestDate; |
| | | import com.dg.core.util.WxUtil; |
| | | import com.iceyyy.workday.WorkUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59);//今天结束时间 |
| | | TestDate td = new TestDate(); |
| | | DateTime dateTimeUser= DateTime.now(); |
| | | if (td.isWeekday(dateTimeUser)){ |
| | | String format="YYYYMMdd"; |
| | | String dateTimeToday=dateTimeUser.toString(format); |
| | | if (!WorkUtils.isWorkendDay(dateTimeToday)){ |
| | | if ( LocalDateTime.now().isAfter(startTime)&&LocalDateTime.now().isBefore(morningStartTime)){//提交时间是上午上班前 |
| | | guideRepairOrder.setTimeoutTime(LocalDate.now(). |
| | | atTime(9+automessageSysSettings.getTimeoutNotificationNum(),0,0)); |
| | |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.iceyyy.workday.WorkUtils; |
| | | import com.squareup.okhttp.OkHttpClient; |
| | | import com.squareup.okhttp.Request; |
| | | import com.squareup.okhttp.Response; |
| | |
| | | * @return |
| | | */ |
| | | public DateTime nextWeekDay(DateTime dateTime){ |
| | | TestDate td=new TestDate(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(dateTime); |
| | | while (true){ |
| | | calendar.add(calendar.DATE,1); |
| | | if (td.isWeekday(new DateTime(calendar))){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
| | | String dateTimeToday = sdf.format(calendar.getTime()); |
| | | if (!WorkUtils.isWorkendDay(dateTimeToday)){ |
| | | return new DateTime(calendar);//返回日期 |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2001 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20010120", false); // 班 |
| | | map.put("20010121", false); // 班 |
| | | map.put("20010124", true); // 休 |
| | | map.put("20010125", true); // 休 |
| | | map.put("20010126", true); // 休 |
| | | map.put("20010129", true); // 休 |
| | | map.put("20010130", true); // 休 |
| | | map.put("20010428", false); // 班 |
| | | map.put("20010429", false); // 班 |
| | | map.put("20010501", true); // 休 |
| | | map.put("20010502", true); // 休 |
| | | map.put("20010503", true); // 休 |
| | | map.put("20010504", true); // 休 |
| | | map.put("20010507", true); // 休 |
| | | map.put("20010929", false); // 班 |
| | | map.put("20010930", false); // 班 |
| | | map.put("20011001", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2002 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20020101", true); // 休 |
| | | map.put("20020102", true); // 休 |
| | | map.put("20020103", true); // 休 |
| | | map.put("20020209", false); // 班 |
| | | map.put("20020210", false); // 班 |
| | | map.put("20020212", true); // 休 |
| | | map.put("20020213", true); // 休 |
| | | map.put("20020214", true); // 休 |
| | | map.put("20020215", true); // 休 |
| | | map.put("20020218", true); // 休 |
| | | map.put("20020427", false); // 班 |
| | | map.put("20020428", false); // 班 |
| | | map.put("20020501", true); // 休 |
| | | map.put("20020502", true); // 休 |
| | | map.put("20020503", true); // 休 |
| | | map.put("20020506", true); // 休 |
| | | map.put("20020507", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2003 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20030101", true); // 休 |
| | | map.put("20030203", true); // 休 |
| | | map.put("20030204", true); // 休 |
| | | map.put("20030205", true); // 休 |
| | | map.put("20030206", true); // 休 |
| | | map.put("20030207", true); // 休 |
| | | map.put("20030208", false); // 班 |
| | | map.put("20030209", false); // 班 |
| | | map.put("20030426", false); // 班 |
| | | map.put("20030427", false); // 班 |
| | | map.put("20030501", true); // 休 |
| | | map.put("20030502", true); // 休 |
| | | map.put("20030505", true); // 休 |
| | | map.put("20030506", true); // 休 |
| | | map.put("20030507", true); // 休 |
| | | map.put("20030927", false); // 班 |
| | | map.put("20030928", false); // 班 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2004 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20040101", true); // 休 |
| | | map.put("20040117", false); // 班 |
| | | map.put("20040118", false); // 班 |
| | | map.put("20040122", true); // 休 |
| | | map.put("20040123", true); // 休 |
| | | map.put("20040126", true); // 休 |
| | | map.put("20040127", true); // 休 |
| | | map.put("20040128", true); // 休 |
| | | map.put("20040503", true); // 休 |
| | | map.put("20040504", true); // 休 |
| | | map.put("20040505", true); // 休 |
| | | map.put("20040506", true); // 休 |
| | | map.put("20040507", true); // 休 |
| | | map.put("20040508", false); // 班 |
| | | map.put("20040509", false); // 班 |
| | | map.put("20041001", true); // 休 |
| | | map.put("20041003", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2005 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20050103", true); // 休 |
| | | map.put("20050205", false); // 班 |
| | | map.put("20050206", false); // 班 |
| | | map.put("20050209", true); // 休 |
| | | map.put("20050210", true); // 休 |
| | | map.put("20050211", true); // 休 |
| | | map.put("20050214", true); // 休 |
| | | map.put("20050215", true); // 休 |
| | | map.put("20050430", false); // 班 |
| | | map.put("20050502", true); // 休 |
| | | map.put("20050503", true); // 休 |
| | | map.put("20050504", true); // 休 |
| | | map.put("20050505", true); // 休 |
| | | map.put("20050506", true); // 休 |
| | | map.put("20050508", false); // 班 |
| | | map.put("20051003", true); // 休 |
| | | map.put("20051004", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2006 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20060102", true); // 休 |
| | | map.put("20060103", true); // 休 |
| | | map.put("20060128", false); // 班 |
| | | map.put("20060130", true); // 休 |
| | | map.put("20060131", true); // 休 |
| | | map.put("20060201", true); // 休 |
| | | map.put("20060202", true); // 休 |
| | | map.put("20060203", true); // 休 |
| | | map.put("20060205", false); // 班 |
| | | map.put("20060429", false); // 班 |
| | | map.put("20060430", false); // 班 |
| | | map.put("20060501", true); // 休 |
| | | map.put("20060502", true); // 休 |
| | | map.put("20060503", true); // 休 |
| | | map.put("20060504", true); // 休 |
| | | map.put("20060505", true); // 休 |
| | | map.put("20060930", false); // 班 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2007 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20070101", true); // 休 |
| | | map.put("20070102", true); // 休 |
| | | map.put("20070103", true); // 休 |
| | | map.put("20070217", false); // 班 |
| | | map.put("20070219", true); // 休 |
| | | map.put("20070220", true); // 休 |
| | | map.put("20070221", true); // 休 |
| | | map.put("20070222", true); // 休 |
| | | map.put("20070223", true); // 休 |
| | | map.put("20070225", false); // 班 |
| | | map.put("20070428", false); // 班 |
| | | map.put("20070429", false); // 班 |
| | | map.put("20070501", true); // 休 |
| | | map.put("20070502", true); // 休 |
| | | map.put("20070503", true); // 休 |
| | | map.put("20070504", true); // 休 |
| | | map.put("20070507", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2008 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20080101", true); // 休 |
| | | map.put("20080203", false); // 班 |
| | | map.put("20080206", true); // 休 |
| | | map.put("20080207", true); // 休 |
| | | map.put("20080208", true); // 休 |
| | | map.put("20080211", true); // 休 |
| | | map.put("20080212", true); // 休 |
| | | map.put("20080404", true); // 休 |
| | | map.put("20080501", true); // 休 |
| | | map.put("20080502", true); // 休 |
| | | map.put("20080504", false); // 班 |
| | | map.put("20080609", true); // 休 |
| | | map.put("20080915", true); // 休 |
| | | map.put("20080927", false); // 班 |
| | | map.put("20080928", false); // 班 |
| | | map.put("20080929", true); // 休 |
| | | map.put("20080930", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2009 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20090101", true); // 休 |
| | | map.put("20090102", true); // 休 |
| | | map.put("20090104", false); // 班 |
| | | map.put("20090124", false); // 班 |
| | | map.put("20090126", true); // 休 |
| | | map.put("20090127", true); // 休 |
| | | map.put("20090128", true); // 休 |
| | | map.put("20090129", true); // 休 |
| | | map.put("20090130", true); // 休 |
| | | map.put("20090201", false); // 班 |
| | | map.put("20090406", true); // 休 |
| | | map.put("20090501", true); // 休 |
| | | map.put("20090528", true); // 休 |
| | | map.put("20090529", true); // 休 |
| | | map.put("20090531", false); // 班 |
| | | map.put("20090927", false); // 班 |
| | | map.put("20091001", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2010 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20100101", true); // 休 |
| | | map.put("20100215", true); // 休 |
| | | map.put("20100216", true); // 休 |
| | | map.put("20100217", true); // 休 |
| | | map.put("20100218", true); // 休 |
| | | map.put("20100219", true); // 休 |
| | | map.put("20100220", false); // 班 |
| | | map.put("20100221", false); // 班 |
| | | map.put("20100405", true); // 休 |
| | | map.put("20100503", true); // 休 |
| | | map.put("20100612", false); // 班 |
| | | map.put("20100613", false); // 班 |
| | | map.put("20100614", true); // 休 |
| | | map.put("20100615", true); // 休 |
| | | map.put("20100616", true); // 休 |
| | | map.put("20100919", false); // 班 |
| | | map.put("20100922", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2011 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20110103", true); // 休 |
| | | map.put("20110130", false); // 班 |
| | | map.put("20110202", true); // 休 |
| | | map.put("20110203", true); // 休 |
| | | map.put("20110204", true); // 休 |
| | | map.put("20110207", true); // 休 |
| | | map.put("20110208", true); // 休 |
| | | map.put("20110212", false); // 班 |
| | | map.put("20110402", false); // 班 |
| | | map.put("20110404", true); // 休 |
| | | map.put("20110405", true); // 休 |
| | | map.put("20110502", true); // 休 |
| | | map.put("20110606", true); // 休 |
| | | map.put("20110912", true); // 休 |
| | | map.put("20111003", true); // 休 |
| | | map.put("20111004", true); // 休 |
| | | map.put("20111005", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2012 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20120102", true); // 休 |
| | | map.put("20120103", true); // 休 |
| | | map.put("20120121", false); // 班 |
| | | map.put("20120123", true); // 休 |
| | | map.put("20120124", true); // 休 |
| | | map.put("20120125", true); // 休 |
| | | map.put("20120126", true); // 休 |
| | | map.put("20120127", true); // 休 |
| | | map.put("20120129", false); // 班 |
| | | map.put("20120331", false); // 班 |
| | | map.put("20120401", false); // 班 |
| | | map.put("20120402", true); // 休 |
| | | map.put("20120403", true); // 休 |
| | | map.put("20120404", true); // 休 |
| | | map.put("20120428", false); // 班 |
| | | map.put("20120430", true); // 休 |
| | | map.put("20120501", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2013 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20130101", true); // 休 |
| | | map.put("20130102", true); // 休 |
| | | map.put("20130103", true); // 休 |
| | | map.put("20130105", false); // 班 |
| | | map.put("20130106", false); // 班 |
| | | map.put("20130211", true); // 休 |
| | | map.put("20130212", true); // 休 |
| | | map.put("20130213", true); // 休 |
| | | map.put("20130214", true); // 休 |
| | | map.put("20130215", true); // 休 |
| | | map.put("20130216", false); // 班 |
| | | map.put("20130217", false); // 班 |
| | | map.put("20130404", true); // 休 |
| | | map.put("20130405", true); // 休 |
| | | map.put("20130407", false); // 班 |
| | | map.put("20130427", false); // 班 |
| | | map.put("20130428", false); // 班 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2014 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20140101", true); // 休 |
| | | map.put("20140126", false); // 班 |
| | | map.put("20140131", true); // 休 |
| | | map.put("20140203", true); // 休 |
| | | map.put("20140204", true); // 休 |
| | | map.put("20140205", true); // 休 |
| | | map.put("20140206", true); // 休 |
| | | map.put("20140208", false); // 班 |
| | | map.put("20140407", true); // 休 |
| | | map.put("20140501", true); // 休 |
| | | map.put("20140502", true); // 休 |
| | | map.put("20140504", false); // 班 |
| | | map.put("20140602", true); // 休 |
| | | map.put("20140908", true); // 休 |
| | | map.put("20140928", false); // 班 |
| | | map.put("20141001", true); // 休 |
| | | map.put("20141002", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2015 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20150101", true); // 休 |
| | | map.put("20150102", true); // 休 |
| | | map.put("20150104", false); // 班 |
| | | map.put("20150215", false); // 班 |
| | | map.put("20150218", true); // 休 |
| | | map.put("20150219", true); // 休 |
| | | map.put("20150220", true); // 休 |
| | | map.put("20150223", true); // 休 |
| | | map.put("20150224", true); // 休 |
| | | map.put("20150228", false); // 班 |
| | | map.put("20150406", true); // 休 |
| | | map.put("20150501", true); // 休 |
| | | map.put("20150622", true); // 休 |
| | | map.put("20150903", true); // 休 |
| | | map.put("20150904", true); // 休 |
| | | map.put("20150906", false); // 班 |
| | | map.put("20151001", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2016 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20160101", true); // 休 |
| | | map.put("20160206", false); // 班 |
| | | map.put("20160208", true); // 休 |
| | | map.put("20160209", true); // 休 |
| | | map.put("20160210", true); // 休 |
| | | map.put("20160211", true); // 休 |
| | | map.put("20160212", true); // 休 |
| | | map.put("20160214", false); // 班 |
| | | map.put("20160404", true); // 休 |
| | | map.put("20160502", true); // 休 |
| | | map.put("20160609", true); // 休 |
| | | map.put("20160610", true); // 休 |
| | | map.put("20160612", false); // 班 |
| | | map.put("20160915", true); // 休 |
| | | map.put("20160916", true); // 休 |
| | | map.put("20160918", false); // 班 |
| | | map.put("20161003", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2017 implements Year20xx { |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20170102", true); // 休 |
| | | map.put("20170122", false); // 班 |
| | | map.put("20170127", true); // 休 |
| | | map.put("20170130", true); // 休 |
| | | map.put("20170131", true); // 休 |
| | | map.put("20170201", true); // 休 |
| | | map.put("20170202", true); // 休 |
| | | map.put("20170204", false); // 班 |
| | | map.put("20170401", false); // 班 |
| | | map.put("20170403", true); // 休 |
| | | map.put("20170404", true); // 休 |
| | | map.put("20170501", true); // 休 |
| | | map.put("20170527", false); // 班 |
| | | map.put("20170529", true); // 休 |
| | | map.put("20170530", true); // 休 |
| | | map.put("20170930", false); // 班 |
| | | map.put("20171002", true); // 休 |
| | | return map; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2018 implements Year20xx { |
| | | |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20180101", true); // 休 |
| | | map.put("20180211", false); // 班 |
| | | map.put("20180215", true); // 休 |
| | | map.put("20180216", true); // 休 |
| | | map.put("20180219", true); // 休 |
| | | map.put("20180220", true); // 休 |
| | | map.put("20180221", true); // 休 |
| | | map.put("20180224", false); // 班 |
| | | map.put("20180405", true); // 休 |
| | | map.put("20180406", true); // 休 |
| | | map.put("20180408", false); // 班 |
| | | map.put("20180428", false); // 班 |
| | | map.put("20180430", true); // 休 |
| | | map.put("20180501", true); // 休 |
| | | map.put("20180618", true); // 休 |
| | | map.put("20180924", true); // 休 |
| | | map.put("20180929", false); // 班 |
| | | map.put("20180930", false); // 班 |
| | | map.put("20181001", true); // 休 |
| | | map.put("20181002", true); // 休 |
| | | map.put("20181003", true); // 休 |
| | | map.put("20181004", true); // 休 |
| | | map.put("20181005", true); // 休 |
| | | map.put("20181229", false); // 班 |
| | | map.put("20181231", true); // 休 |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2019 implements Year20xx { |
| | | |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20190101", true); // 休 |
| | | map.put("20190202", false); // 班 |
| | | map.put("20190203", false); // 班 |
| | | map.put("20190204", true); // 休 |
| | | map.put("20190205", true); // 休 |
| | | map.put("20190206", true); // 休 |
| | | map.put("20190207", true); // 休 |
| | | map.put("20190208", true); // 休 |
| | | map.put("20190405", true); // 休 |
| | | map.put("20190428", false); // 班 |
| | | map.put("20190501", true); // 休 |
| | | map.put("20190502", true); // 休 |
| | | map.put("20190503", true); // 休 |
| | | map.put("20190505", false); // 班 |
| | | map.put("20190607", true); // 休 |
| | | map.put("20190913", true); // 休 |
| | | map.put("20190929", false); // 班 |
| | | map.put("20191001", true); // 休 |
| | | map.put("20191002", true); // 休 |
| | | map.put("20191003", true); // 休 |
| | | map.put("20191004", true); // 休 |
| | | map.put("20191007", true); // 休 |
| | | map.put("20191012", false); // 班 |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class Year2020 implements Year20xx { |
| | | |
| | | @Override |
| | | public Map<String, Boolean> getYearMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | map.put("20200101", true); // 休 |
| | | map.put("20200119", false); // 班 |
| | | map.put("20200124", true); // 休 |
| | | map.put("20200127", true); // 休 |
| | | map.put("20200128", true); // 休 |
| | | map.put("20200129", true); // 休 |
| | | map.put("20200130", true); // 休 |
| | | map.put("20200131", true); // 休(+) |
| | | // map.put("20200201", false); // 班 |
| | | map.put("20200406", true); // 休 |
| | | map.put("20200426", false); // 班 |
| | | map.put("20200501", true); // 休 |
| | | map.put("20200504", true); // 休 |
| | | map.put("20200505", true); // 休 |
| | | map.put("20200509", false); // 班 |
| | | map.put("20200625", true); // 休 |
| | | map.put("20200626", true); // 休 |
| | | map.put("20200628", false); // 班 |
| | | map.put("20200927", false); // 班 |
| | | map.put("20201001", true); // 休 |
| | | map.put("20201002", true); // 休 |
| | | map.put("20201005", true); // 休 |
| | | map.put("20201006", true); // 休 |
| | | map.put("20201007", true); // 休 |
| | | map.put("20201008", true); // 休 |
| | | map.put("20201010", false); // 班 |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import java.util.Map; |
| | | |
| | | public interface Year20xx { |
| | | public Map<String, Boolean> getYearMap(); |
| | | } |
New file |
| | |
| | | package com.dg.core.util.presence; |
| | | |
| | | import com.iceyyy.icework.presence.Year2001; |
| | | import com.iceyyy.icework.presence.Year2002; |
| | | import com.iceyyy.icework.presence.Year2003; |
| | | import com.iceyyy.icework.presence.Year2004; |
| | | import com.iceyyy.icework.presence.Year2005; |
| | | import com.iceyyy.icework.presence.Year2006; |
| | | import com.iceyyy.icework.presence.Year2007; |
| | | import com.iceyyy.icework.presence.Year2008; |
| | | import com.iceyyy.icework.presence.Year2009; |
| | | import com.iceyyy.icework.presence.Year2010; |
| | | import com.iceyyy.icework.presence.Year2011; |
| | | import com.iceyyy.icework.presence.Year2012; |
| | | import com.iceyyy.icework.presence.Year2013; |
| | | import com.iceyyy.icework.presence.Year2014; |
| | | import com.iceyyy.icework.presence.Year2015; |
| | | import com.iceyyy.icework.presence.Year2016; |
| | | import com.iceyyy.icework.presence.Year2017; |
| | | import com.iceyyy.icework.presence.Year2018; |
| | | import com.iceyyy.icework.presence.Year2019; |
| | | import com.iceyyy.icework.presence.Year2020; |
| | | import com.iceyyy.icework.presence.Year20xx; |
| | | |
| | | import java.util.Map; |
| | | |
| | | public class YearMap { |
| | | |
| | | public static void main(String[] args) { |
| | | int year = 2001; |
| | | System.out.println(YearMap.yearMap(year)); |
| | | } |
| | | |
| | | public static Map<String, Boolean> yearMap(int year) { |
| | | com.iceyyy.icework.presence.Year20xx createMap = createMap(year); |
| | | return createMap.getYearMap(); |
| | | } |
| | | |
| | | private static Year20xx createMap(int year) { |
| | | if (year == 2001) { |
| | | return new Year2001(); |
| | | } else if (year == 2002) { |
| | | return new Year2002(); |
| | | } else if (year == 2003) { |
| | | return new Year2003(); |
| | | } else if (year == 2004) { |
| | | return new Year2004(); |
| | | } else if (year == 2005) { |
| | | return new Year2005(); |
| | | } else if (year == 2006) { |
| | | return new Year2006(); |
| | | } else if (year == 2007) { |
| | | return new Year2007(); |
| | | } else if (year == 2008) { |
| | | return new Year2008(); |
| | | } else if (year == 2009) { |
| | | return new Year2009(); |
| | | } else if (year == 2010) { |
| | | return new Year2010(); |
| | | } else if (year == 2011) { |
| | | return new Year2011(); |
| | | } else if (year == 2012) { |
| | | return new Year2012(); |
| | | } else if (year == 2013) { |
| | | return new Year2013(); |
| | | } else if (year == 2014) { |
| | | return new Year2014(); |
| | | } else if (year == 2015) { |
| | | return new Year2015(); |
| | | } else if (year == 2016) { |
| | | return new Year2016(); |
| | | } else if (year == 2017) { |
| | | return new Year2017(); |
| | | } else if (year == 2018) { |
| | | return new Year2018(); |
| | | } else if (year == 2019) { |
| | | return new Year2019(); |
| | | } else if (year == 2020) { |
| | | return new Year2020(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dg.core.util.workday; |
| | | |
| | | public class Data { |
| | | private int date; |
| | | private boolean repose; |
| | | |
| | | public Data(int date, boolean repose) { |
| | | this.date = date; |
| | | this.repose = repose; |
| | | } |
| | | |
| | | public int getDate() { |
| | | return date; |
| | | } |
| | | |
| | | public boolean getRepose() { |
| | | return repose; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.workday; |
| | | |
| | | import com.iceyyy.icework.presence.YearMap; |
| | | import com.iceyyy.nongli.NongLi; |
| | | import com.iceyyy.workday.Data; |
| | | |
| | | import java.io.BufferedReader; |
| | | import java.io.FileNotFoundException; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.Map.Entry; |
| | | |
| | | /** |
| | | * iceworkday工作日算法 |
| | | * @author IceWater zxcyhn@126.com |
| | | */ |
| | | public class WorkUtils { |
| | | |
| | | public static Map<String, Boolean> weekendMap(String year) { |
| | | if (year == null || "".equals(year.trim())) { |
| | | throw new RuntimeException("传入的参数为空"); |
| | | } |
| | | if (year.length() != 4) { |
| | | throw new RuntimeException("传入的参数格式错误,应传入yyyyMMdd格式的日期"); |
| | | } |
| | | int yearNum = Integer.parseInt(year.substring(0, 4)); |
| | | if (yearNum < 2001) { |
| | | throw new RuntimeException("工作日计算年份需要大于等于2001"); |
| | | } else if (yearNum > 2017) { |
| | | Map<String, Boolean> mapFromFile = weekMapFromFile(); |
| | | mapFromFile = filterMap(mapFromFile, yearNum); |
| | | Map<String, Boolean> map = complexCalculate(yearNum); |
| | | if (mapFromFile.size() != 0) { |
| | | map.putAll(mapFromFile); |
| | | } |
| | | return map; |
| | | } else { |
| | | Map<String, Boolean> map = YearMap.yearMap(yearNum); |
| | | return map; |
| | | } |
| | | } |
| | | |
| | | public static boolean isWorkendDay(String ymd) { |
| | | if (ymd == null || "".equals(ymd)) { |
| | | throw new RuntimeException("输入的日期不能为空"); |
| | | } |
| | | ymd = convertDate(ymd); |
| | | if("19991230".equals(ymd)) { |
| | | return true; |
| | | } |
| | | if("19991231".equals(ymd)) { |
| | | return true; |
| | | } |
| | | String yearStr = ymd.substring(0, 4); |
| | | Map<String, Boolean> weekendMap = weekendMap(yearStr); |
| | | Boolean isWeekend = weekendMap.get(ymd); |
| | | if (isWeekend == null) { |
| | | int day = getWeekDay(ymd); |
| | | if (day == 0 || day == 6) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } else { |
| | | return isWeekend; |
| | | } |
| | | } |
| | | |
| | | private static String convertDate(String dateStr) { |
| | | String[] array = null; |
| | | if (dateStr.contains("-")) { |
| | | array = dateStr.split("-"); |
| | | } else if (dateStr.contains(".")) { |
| | | array = dateStr.split("\\."); |
| | | } else if (dateStr.contains("/")) { |
| | | array = dateStr.split("/"); |
| | | } else if (dateStr.contains("_")) { |
| | | array = dateStr.split("_"); |
| | | } else if (dateStr.contains("年")) { |
| | | if (dateStr.endsWith("日")) { |
| | | dateStr = dateStr.substring(0, dateStr.length() - 1); |
| | | } |
| | | array = dateStr.split("年|月"); |
| | | } else { |
| | | if (dateStr.length() == 8) { |
| | | return dateStr; |
| | | } |
| | | } |
| | | String yearStr = array[0]; |
| | | String monthStr = array[1]; |
| | | String dayStr = array[2]; |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (int i = 0; i < 4 - yearStr.length(); i++) { |
| | | sb.append("0"); |
| | | } |
| | | sb.append(yearStr); |
| | | if (monthStr.length() == 1) { |
| | | sb.append("0"); |
| | | } |
| | | sb.append(monthStr); |
| | | if (dayStr.length() == 1) { |
| | | sb.append("0"); |
| | | } |
| | | sb.append(dayStr); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | private static Map<String, Boolean> complexCalculate(int yearNum) { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | String newYear = "0101"; |
| | | String chingming = "0405"; |
| | | String labor = "0501"; |
| | | String dragon = "0505L"; |
| | | String autumn = "0815L"; |
| | | Map<String, Boolean> newYearMap = gregorianNewYearMap(yearNum, newYear); |
| | | Map<String, Boolean> nextYearMap = gregorianNewYearMap(yearNum + 1, newYear); |
| | | map.putAll(currentYearMap(newYearMap, nextYearMap, yearNum)); |
| | | map.putAll(festivalMap(yearNum, chingming)); |
| | | map.putAll(newYearLunarMap(yearNum)); |
| | | map.putAll(festivalMap(yearNum, labor)); |
| | | map.putAll(festivalMap(yearNum, dragon)); |
| | | map.putAll(nationalAutumnMap(yearNum, autumn)); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> nationalAutumnMap(int yearNum, String autumn) { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | String ymd = yearNum + "0815";// 中秋节 |
| | | String ymdNational = yearNum + "1001";// 国庆节 |
| | | String ymdAutumn = convertGregorian(ymd); |
| | | int day = getWeekDay(ymdNational); |
| | | Map<String, Boolean> mapHistory = getHistoryMap(); |
| | | String key = ymdAutumn.substring(4, 8) + "_" + day; |
| | | if (mapHistory.get(key) != null) { |
| | | // TODO 此处希望从近几年相似的月份中进行类比,是一种优化算法,暂未实现,但不影响算法使用。 |
| | | } |
| | | String monthAutumn = ymdAutumn.substring(4, 6); |
| | | String dateAutumn = ymdAutumn.substring(6, 8); |
| | | int monthAutumnNum = Integer.parseInt(monthAutumn); |
| | | int dateAutumnNum = Integer.parseInt(dateAutumn); |
| | | if (dateAutumnNum < 25 && monthAutumnNum == 9) {// 中秋在9.25以前 |
| | | // 中秋最早9.7 最晚10.8 |
| | | map.putAll(festivalMap(yearNum, "0815L"));// 中秋 |
| | | map.putAll(nationalMap(yearNum));// 国庆 |
| | | } else if (monthAutumnNum == 10) {// 中秋节在10月份 |
| | | map.putAll(nationalOctMap(yearNum));// 国庆 |
| | | } else if (dateAutumnNum >= 25 && monthAutumnNum == 9) {// 中秋节在9.25 9.26 |
| | | // 9.27 9.28 |
| | | // 9.29 9.30 |
| | | // 1. 中秋 25 全部两段 周一~周日 |
| | | // 2. 中秋 26 全部两段 周二~周一 |
| | | // 3. 中秋 27 最复杂 周三~周二 |
| | | // 4. 中秋 28 全部休8天 周四~周三 |
| | | // 5. 中秋 29 全部休8天 周五~周四 |
| | | // 6. 中秋 30 全部休8天 周六~周五 |
| | | // 补班 最早 9.22 最迟 10.12 |
| | | int dayAutumn = getWeekDay(ymdAutumn); |
| | | map.putAll(complexMap(yearNum, dateAutumnNum, dayAutumn));// 国庆 |
| | | } else { |
| | | throw new RuntimeException("中秋日期格式错误"); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> complexMap(int yearNum, int dateAutumnNum, int dayAutumn) { |
| | | com.iceyyy.workday.Data[][] table = getAutumnTable(dateAutumnNum); |
| | | com.iceyyy.workday.Data[] row = getRow(table, dateAutumnNum, dayAutumn); |
| | | return row2map(row, yearNum); |
| | | } |
| | | |
| | | private static Map<String, Boolean> row2map(com.iceyyy.workday.Data[] row, int yearNum) { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | for (int i = 0; i < row.length; i++) { |
| | | com.iceyyy.workday.Data data = row[i]; |
| | | int date = data.getDate(); |
| | | boolean repose = data.getRepose(); |
| | | String monthStr = "10";// 10月份 |
| | | if (date > 15) { |
| | | monthStr = "09";// 9月份 |
| | | } |
| | | String dateStr = date + ""; |
| | | if (date < 10) { |
| | | dateStr = "0" + date; |
| | | } |
| | | String key = yearNum + monthStr + dateStr; |
| | | map.put(key, repose); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 根据中秋的星期获取具体的某一行的数据 |
| | | * |
| | | * @param table |
| | | * @param dayAutumn |
| | | * @return |
| | | */ |
| | | private static com.iceyyy.workday.Data[] getRow(com.iceyyy.workday.Data[][] table, int dateAutumnNum, int dayAutumn) { |
| | | // 25 1 [0] |
| | | // 25 2 [1] |
| | | // 25 3 [2] |
| | | |
| | | // 26 1 [6] |
| | | // 26 2 [0] |
| | | // 26 3 [1] |
| | | // 26 4 [2] |
| | | // date+index-23=day |
| | | // index=day+23-date |
| | | int index = (dayAutumn + 31 - dateAutumnNum) % 7; |
| | | return table[index]; |
| | | } |
| | | |
| | | private static com.iceyyy.workday.Data[][] getAutumnTable(int dateAutumnNum) { |
| | | com.iceyyy.workday.Data[][] days1 = { |
| | | { new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(22, false), new com.iceyyy.workday.Data(24, true), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(30, false), |
| | | new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true) }, |
| | | { new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, false), |
| | | new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(12, false) }, |
| | | { new com.iceyyy.workday.Data(21, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(1, true), |
| | | new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(11, false) }, |
| | | { new com.iceyyy.workday.Data(20, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } }; |
| | | com.iceyyy.workday.Data[][] days2 = { |
| | | { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true), |
| | | new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, false), |
| | | new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(13, false) }, |
| | | { new com.iceyyy.workday.Data(22, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(1, true), |
| | | new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true) }, |
| | | { new com.iceyyy.workday.Data(21, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true) }, |
| | | { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(9, false) }, |
| | | { new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } }; |
| | | com.iceyyy.workday.Data[][] days3 = { |
| | | { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(24, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), |
| | | new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), |
| | | new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(6, false), new com.iceyyy.workday.Data(7, false) }, |
| | | { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), |
| | | new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, false), new com.iceyyy.workday.Data(6, false) }, |
| | | { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(11, false) }, |
| | | { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), |
| | | new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(24, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), |
| | | new com.iceyyy.workday.Data(9, false) } }; |
| | | com.iceyyy.workday.Data[][] days4 = { |
| | | { new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(7, false), new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, false), new com.iceyyy.workday.Data(7, false) }, |
| | | { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(6, false) }, |
| | | { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), |
| | | new com.iceyyy.workday.Data(3, true) }, |
| | | { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), |
| | | new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true) }, |
| | | { new com.iceyyy.workday.Data(25, false), new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), |
| | | new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true) }, |
| | | { new com.iceyyy.workday.Data(25, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true), |
| | | new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(8, false) } }; |
| | | com.iceyyy.workday.Data[][] days5 = { |
| | | { new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, false), new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(7, false) }, |
| | | { new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), |
| | | new com.iceyyy.workday.Data(4, true) }, |
| | | { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), |
| | | new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true) }, |
| | | { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), |
| | | new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true) }, |
| | | { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(9, false) }, |
| | | { new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } }; |
| | | com.iceyyy.workday.Data[][] days6 = { |
| | | { new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(8, false) }, |
| | | { new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), |
| | | new com.iceyyy.workday.Data(5, true) }, |
| | | { new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), |
| | | new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true) }, |
| | | { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), |
| | | new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true) }, |
| | | { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), |
| | | new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) }, |
| | | { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), |
| | | new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new Data(9, false) } }; |
| | | if (dateAutumnNum == 25) { |
| | | return days1; |
| | | } else if (dateAutumnNum == 26) { |
| | | return days2; |
| | | } else if (dateAutumnNum == 27) { |
| | | return days3; |
| | | } else if (dateAutumnNum == 28) { |
| | | return days4; |
| | | } else if (dateAutumnNum == 29) { |
| | | return days5; |
| | | } else if (dateAutumnNum == 30) { |
| | | return days6; |
| | | } |
| | | throw new RuntimeException("中秋日期格式错误"); |
| | | } |
| | | |
| | | private static Map<String, Boolean> nationalOctMap(int yearNum) { |
| | | String ymd = yearNum + "1001"; |
| | | int day = getWeekDay(ymd); |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | int[][] correction = { { 30 }, { 29, 30 }, { 28, 29 }, { 28, 11 }, { 27, 10 }, { 9, 10 }, { 9 } }; |
| | | for (int i = 0; i < correction[day].length; i++) { |
| | | int corr = correction[day][i]; |
| | | if (corr <= 15) { |
| | | String key = yearNum + "10" + convertNum(corr); |
| | | map.put(key, false); |
| | | } else { |
| | | String key = yearNum + "09" + convertNum(corr); |
| | | map.put(key, false); |
| | | } |
| | | } |
| | | int start = 0; |
| | | if (day == 0 || day == 1) { |
| | | start = -1; |
| | | } |
| | | int end = 0; |
| | | if (day == 5) { |
| | | end = 1; |
| | | } |
| | | for (int i = 0 + start; i < 8 + end; i++) {// 国庆节一般为7天 |
| | | String curDate = addDay(ymd, i); |
| | | int curDay = getWeekDay(curDate); |
| | | if (curDay > 0 && curDay < 6) { |
| | | map.put(curDate, true); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> nationalMap(int yearNum) { |
| | | String ymd = yearNum + "1001"; |
| | | int day = getWeekDay(ymd); |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | int[][] correction = { { 30, 8 }, { 29, 14 }, { 29, 12 }, { 28, 11 }, { 10 }, { 26, 9 }, { 8, 9 } }; |
| | | if (day > 0 && day < 6) { |
| | | map.put(ymd, true); |
| | | } |
| | | for (int i = 0; i < correction[day].length; i++) { |
| | | int corr = correction[day][i]; |
| | | if (corr <= 15) { |
| | | String key = yearNum + "10" + convertNum(corr); |
| | | map.put(key, false); |
| | | } else { |
| | | String key = yearNum + "09" + convertNum(corr); |
| | | map.put(key, false); |
| | | } |
| | | } |
| | | for (int i = 0; i < 7; i++) {// 国庆节一般为7天 |
| | | String curDate = addDay(ymd, i); |
| | | int curDay = getWeekDay(curDate); |
| | | if (curDay > 0 && curDay < 6) { |
| | | map.put(curDate, true); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static String convertNum(int num) { |
| | | if (num < 10) { |
| | | return "0" + num; |
| | | } else { |
| | | return num + ""; |
| | | } |
| | | } |
| | | |
| | | private static Map<String, Boolean> getHistoryMap() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> newYearLunarMap(int yearNum) { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | String ymd = yearNum + "0101"; |
| | | ymd = convertGregorian(ymd); |
| | | int day = getWeekDay(ymd); |
| | | int[][] correction = { { 6, 7 }, { -2, 6 }, { -3, 12 }, { -3, 10 }, { -4, 9 }, { -5, 8 }, { -6, 7 } }; |
| | | int correct = -1; |
| | | if (yearNum == 2014 || yearNum <= 2007) { |
| | | correction = new int[][] { { 6, 7 }, { -2, 6 }, { -3, 12 }, { -3, 10 }, { -4, 9 }, { -5, 8 }, { -6, 7 } }; |
| | | correct = 0; |
| | | } |
| | | for (int i = 0; i < correction[day].length; i++) { |
| | | map.put(addDay(ymd, correction[day][i]), false); |
| | | } |
| | | for (int i = 0; i < 7; i++) { |
| | | String curYmd = addDay(ymd, i + correct); |
| | | int dayCur = getWeekDay(curYmd); |
| | | if (dayCur > 0 && dayCur < 6) { |
| | | map.put(curYmd, true); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> currentYearMap(Map<String, Boolean> newYearMap, |
| | | Map<String, Boolean> nextYearMap, int yearNum) { |
| | | String yearStr = yearNum + ""; |
| | | Set<String> setCur = newYearMap.keySet(); |
| | | Set<String> setNext = nextYearMap.keySet(); |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | for (String key : setCur) { |
| | | if (key.startsWith(yearStr)) { |
| | | map.put(key, newYearMap.get(key)); |
| | | } |
| | | } |
| | | for (String key : setNext) { |
| | | if (key.startsWith(yearStr)) { |
| | | map.put(key, nextYearMap.get(key)); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> festivalMap(int yearNum, String festival) { |
| | | String ymd = yearNum + festival; |
| | | if (festival.endsWith("L")) { |
| | | festival = festival.substring(0, festival.length() - 1); |
| | | ymd = convertGregorian(ymd); |
| | | } else if ("0405".equals(festival)) { |
| | | ymd = chingming(yearNum); |
| | | } |
| | | return small(ymd); |
| | | } |
| | | |
| | | private static Map<String, Boolean> gregorianNewYearMap(int yearNum, String festival) { |
| | | String ymd = yearNum + festival; |
| | | return gregorianNewYearSmall(ymd); |
| | | } |
| | | |
| | | private static String chingming(int yearNum) { |
| | | return yearNum + "040" + qing(yearNum); |
| | | } |
| | | |
| | | /** |
| | | * 计算清明节的日期(可计算范围: 1700-3100) |
| | | * |
| | | * @param year |
| | | * 需要计算的年份 |
| | | * @return 清明节在公历中的日期 |
| | | */ |
| | | private static int qing(int year) { |
| | | if (year == 2232) { |
| | | return 4; |
| | | } |
| | | if (year < 1700) { |
| | | throw new RuntimeException("1700年以前暂时不支持"); |
| | | } |
| | | if (year >= 3100) { |
| | | throw new RuntimeException("3100年以后暂时不支持"); |
| | | } |
| | | double[] coefficient = { 5.15, 5.37, 5.59, 4.82, 5.02, 5.26, 5.48, 4.70, 4.92, 5.135, 5.36, 4.60, 4.81, 5.04, |
| | | 5.26 }; |
| | | int mod = year % 100; |
| | | return (int) (mod * 0.2422 + coefficient[year / 100 - 17] - mod / 4); |
| | | } |
| | | |
| | | private static Map<String, Boolean> small(String ymd) { |
| | | int day = getWeekDay(ymd); |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | int[][] correction = { { 1 }, {}, { -1, -3 }, { -1, -2, -3, -4 }, { 1, 3 }, {}, { 2 } }; |
| | | // 6.取-1 2014年清明 2015年端午 6. 取2 2012年端午 |
| | | if (day > 0 && day < 6) { |
| | | map.put(ymd, true); |
| | | } |
| | | if (day == 3) { |
| | | map.put(addDay(ymd, -1), true); |
| | | map.put(addDay(ymd, -2), true); |
| | | map.put(addDay(ymd, -3), false); |
| | | map.put(addDay(ymd, -4), false); |
| | | } else { |
| | | boolean flag = true; |
| | | for (int i = 0; i < correction[day].length; i++) { |
| | | map.put(addDay(ymd, correction[day][i]), flag); |
| | | flag = false; |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, Boolean> gregorianNewYearSmall(String ymd) { |
| | | int day = getWeekDay(ymd); |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | int[][] correction = { { 1 }, {}, { 1, 2, 4, 5 }, {}, { 1, 2, 3 }, {}, { 2 } }; |
| | | // 6.取-1 2014年清明 2015年端午 6. 取2 2012年端午 0{+1}1{} 2{+1+2 +4b+5b} 3{} |
| | | // 4{+1,+2,+3b}5{}6{+2} |
| | | if (day > 0 && day < 6) { |
| | | map.put(ymd, true); |
| | | } |
| | | if (day == 2) { |
| | | map.put(addDay(ymd, 1), true); |
| | | map.put(addDay(ymd, 2), true); |
| | | map.put(addDay(ymd, 4), false); |
| | | map.put(addDay(ymd, 5), false); |
| | | } else if (day == 3) { |
| | | |
| | | } else if (day == 4) { |
| | | map.put(addDay(ymd, 1), true); |
| | | map.put(addDay(ymd, 3), false); |
| | | } else { |
| | | boolean flag = true; |
| | | for (int i = 0; i < correction[day].length; i++) { |
| | | map.put(addDay(ymd, correction[day][i]), flag); |
| | | flag = false; |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static int getWeekDay(String ymd) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
| | | Date date = null; |
| | | try { |
| | | date = sdf.parse(ymd); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | int day = calendar.get(Calendar.DAY_OF_WEEK) - 1; |
| | | return day; |
| | | } |
| | | |
| | | private static String convertGregorian(String ymd) {// private |
| | | String cnYmd = convertCnYmd(ymd); |
| | | int start = 18; |
| | | int len = 60;// 公历农历按最多相差60天计算。 |
| | | for (int i = start; i < start + len; i++) { |
| | | String gregorianDate = addDay(ymd, i); |
| | | String lunarDate = NongLi.getDate(gregorianDate); |
| | | if (cnYmd.equals(lunarDate)) { |
| | | return gregorianDate; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private static String convertCnYmd(String ymd) {// private |
| | | String numArray = "零一二三四五六七八九十"; |
| | | String m = ymd.substring(4, 6); |
| | | String d = ymd.substring(6, 8); |
| | | int month = Integer.parseInt(m); |
| | | int day = Integer.parseInt(d); |
| | | String yearStr = ""; |
| | | for (int i = 0; i < 4; i++) { |
| | | yearStr += numArray.charAt(ymd.charAt(i) - '0') + ""; |
| | | } |
| | | yearStr += "年"; |
| | | String monthStr = ""; |
| | | if ("11".equals(m)) { |
| | | monthStr = "冬"; |
| | | } else if ("12".equals(m)) { |
| | | monthStr = "腊"; |
| | | } else if ("01".equals(m)) { |
| | | monthStr = "正"; |
| | | } else { |
| | | monthStr = numArray.charAt(month) + ""; |
| | | } |
| | | monthStr += "月"; |
| | | String dayStr = ""; |
| | | if (day <= 10) { |
| | | dayStr = "初" + numArray.charAt(day); |
| | | } else if (day < 20) { |
| | | dayStr = "十" + numArray.charAt(day - 10); |
| | | } else if (day == 20) { |
| | | dayStr = "二十"; |
| | | } else if (day == 30) { |
| | | dayStr = "三十"; |
| | | } else { |
| | | dayStr = "廿" + numArray.charAt(day - 20); |
| | | } |
| | | return yearStr + monthStr + dayStr; |
| | | } |
| | | |
| | | private static String addDay(String date, int dayLength) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
| | | Date dateSrc = null; |
| | | try { |
| | | dateSrc = sdf.parse(date); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(dateSrc); |
| | | cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + dayLength); |
| | | return sdf.format(cal.getTime()); |
| | | } |
| | | |
| | | private static String[] read(String fileName) { |
| | | BufferedReader br = null; |
| | | ArrayList<String> list = new ArrayList<String>(); |
| | | |
| | | try { |
| | | br = new BufferedReader( |
| | | new InputStreamReader(WorkUtils.class.getClassLoader().getResourceAsStream(fileName))); |
| | | String every = null; |
| | | while ((every = br.readLine()) != null) { |
| | | if (!every.startsWith("#")) { |
| | | list.add(every); |
| | | } |
| | | } |
| | | String[] datas = new String[list.size()]; |
| | | for (int i = 0; i < datas.length; i++) { |
| | | datas[i] = list.get(i); |
| | | } |
| | | return datas; |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (br != null) { |
| | | try { |
| | | br.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private static Map<String, Boolean> weekMapFromFile() { |
| | | Map<String, Boolean> map = new HashMap<String, Boolean>(); |
| | | String fileName = "iceweek.txt"; |
| | | String[] lines = WorkUtils.read(fileName); |
| | | for (String line : lines) { |
| | | if (line == null || line.length() != 9) { |
| | | continue; |
| | | } |
| | | String key = line.substring(0, 8); |
| | | Boolean value = convertWork(line.substring(8)); |
| | | map.put(key, value); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static Boolean convertWork(String str) { |
| | | if ("b".equals(str)) { |
| | | return false; |
| | | } else if ("x".equals(str)) { |
| | | return true; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private static Map<String, Boolean> filterMap(Map<String, Boolean> map, int year) { |
| | | String yearStr = year + ""; |
| | | Map<String, Boolean> newMap = new HashMap<String, Boolean>(); |
| | | Set<Entry<String, Boolean>> entrySet = map.entrySet(); |
| | | for (Entry<String, Boolean> entry : entrySet) { |
| | | String key = entry.getKey(); |
| | | Boolean value = entry.getValue(); |
| | | if (key != null && key.startsWith(yearStr)) { |
| | | newMap.put(key, value); |
| | | } |
| | | } |
| | | return newMap; |
| | | } |
| | | |
| | | /** |
| | | * 提示语 |
| | | * @return 提示语 |
| | | */ |
| | | protected static String warn() { |
| | | return "注意:该算法对于将来的时间仅是预测,并不能完全精确。"; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dg.core.util.workday; |
| | | |
| | | import com.iceyyy.workday.WorkUtils; |
| | | |
| | | import java.util.*; |
| | | |
| | | public class WorkdayGen { |
| | | |
| | | public static void main(String[] args) { |
| | | int year = 2021; |
| | | String code = genYearCode(year); |
| | | System.out.println(code); |
| | | } |
| | | |
| | | protected static String gen(int year) { |
| | | String yearStr = String.valueOf(year); |
| | | Map<String, Boolean> weekendMap = WorkUtils.weekendMap(yearStr); |
| | | Set<String> keySet = weekendMap.keySet(); |
| | | List<String> list = new ArrayList<>(keySet); |
| | | Collections.sort(list); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (String ymd : list) { |
| | | boolean weekendDay = WorkUtils.isWorkendDay(ymd); |
| | | String itemCode = genItemCode(ymd, weekendDay); |
| | | sb.append(itemCode); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | private static String genItemCode(String ymd, boolean weekendDay) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | String tab = " "; |
| | | String nl = "\r\n"; |
| | | sb.append(tab); |
| | | sb.append("map.put(\""); |
| | | sb.append(ymd); |
| | | sb.append("\", "); |
| | | sb.append(weekendDay); |
| | | sb.append("); // "); |
| | | sb.append(wordCode(weekendDay)); |
| | | sb.append(nl); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | private static String wordCode(boolean weekday) { |
| | | if (weekday) { |
| | | return "休"; |
| | | } else { |
| | | return "班"; |
| | | } |
| | | } |
| | | |
| | | private static String genYearCode(int year) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | String nl = "\r\n"; |
| | | sb.append("package com.iceyyy.icework.presence;" + nl); |
| | | sb.append("" + nl); |
| | | sb.append("import java.util.HashMap;" + nl); |
| | | sb.append("import java.util.Map;" + nl); |
| | | sb.append(""); |
| | | sb.append("public class Year" + year + " implements Year20xx {" + nl); |
| | | sb.append("" + nl); |
| | | sb.append(" @Override" + nl); |
| | | sb.append(" public Map<String, Boolean> getYearMap() {" + nl); |
| | | sb.append(" Map<String, Boolean> map = new HashMap<String, Boolean>();" + nl); |
| | | String gen = gen(year); |
| | | sb.append(gen); |
| | | sb.append(" return map;" + nl); |
| | | sb.append(" }" + nl); |
| | | sb.append("" + nl); |
| | | sb.append("}" + nl); |
| | | return sb.toString(); |
| | | } |
| | | } |