百度云盘链接:https://pan.baidu.com/s/1icpovyE4DXbqHHRftup0iA
提取码:lcq5,下载2022年油价调整日历,导入手机日历或Outlook,可提醒加油啦!
参考《应用iCalendar库Biweekly求2021年工作日及油价调整时间》
根据国务院网站《国务院办公厅关于2022年部分节假日安排的通知》和《春节国庆放7天,五一放5天,2022年放假安排来了!》
- 调班日期:0129,0130,0402,0424,0507,1008,1009
- 调休日期:0103,0131,0201,0202,0203,0204,0404,0405,0502,0503,0504,0603,0912,1003,1004,1005,1006,1007
- 2021年最后一次调价在12月31日
可从https://gitee.com/taiqwu/oil-price-adjustment/blob/master/Oil.java下载。
import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Scanner; import java.util.ArrayList; import java.util.List; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import biweekly.Biweekly; import biweekly.ICalendar; import biweekly.component.VEvent; import biweekly.io.TimezoneAssignment; import biweekly.io.TimezoneInfo; import biweekly.property.DateStart; import biweekly.property.ExceptionDates; import biweekly.property.RecurrenceDates; import biweekly.util.ByDay; import biweekly.util.DayOfWeek; import biweekly.util.Duration; import biweekly.util.Frequency; import biweekly.util.ICalDate; import biweekly.util.Recurrence; import biweekly.util.com.google.ical.compat.javautil.DateIterator; public class Oil { private int year, last; private List输入workdays, restdays; public class TextUtils { static public boolean isEmpty(CharSequence str) { return str == null || str.toString().trim().length() == 0; } } public class DateTimeUtils { static public ICalDate parseICalDate(int year, String month_day) { if (TextUtils.isEmpty(month_day)) { return null; } else { month_day = month_day.trim(); Calendar calendar = getDateZeroOClock(year, Integer.parseInt(month_day.substring(0, 2)), Integer.parseInt(month_day.substring(2, 4))); return new ICalDate(calendar.getTime(), false); } } static public List parseListICalDate(int year, String string) { List iCalDates = new ArrayList<>(); if (!TextUtils.isEmpty(string)) { string = string.trim(); for (String s : string.split(",")) { iCalDates.add(parseICalDate(year, s)); } } return iCalDates; } static public Calendar getDateZeroOClock(int year, int month, int mday) { Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); calendar.set(year, month - 1, mday); return calendar; } } // 构建从上年度最后一次调价开始到本年年底的工作日event public VEvent genWorkdayEvent() { VEvent event = new VEvent(); event.setSummary(String.format("%d年工作日", year)); Calendar calendar = DateTimeUtils.getDateZeroOClock(year - 1, 12, last); event.setDateStart(calendar.getTime(), false); event.setDuration(Duration.parse("P1D")); calendar = DateTimeUtils.getDateZeroOClock(year, 12, 31); Recurrence recur = new Recurrence.Builder(Frequency.WEEKLY) .until(new ICalDate(calendar.getTime(), true)) .workweekStarts(DayOfWeek.MONDAY) .byDay(DayOfWeek.MONDAY) .byDay(DayOfWeek.TUESDAY) .byDay(DayOfWeek.WEDNESDAY) .byDay(DayOfWeek.THURSDAY) .byDay(DayOfWeek.FRIDAY) .build(); event.setRecurrenceRule(recur); RecurrenceDates rdate = new RecurrenceDates(); rdate.getDates().addAll(workdays); event.addRecurrenceDates(rdate); ExceptionDates exdate = new ExceptionDates(); exdate.getValues().addAll(restdays); event.addExceptionDates(exdate); return event; } // 计算油价调整日 public List calcAdjustDates(VEvent event) { List dates = new ArrayList (); DateIterator it = event.getDateIterator(TimeZone.getTimeZone("UTC")); if (it.hasNext()) { it.next(); // 跳过上年度最后一次油价调整日 for (int i = 1; it.hasNext(); i = (i + 1) % 10) if (i == 0) // 每10个工作日调整一次油价 dates.add(new ICalDate(it.next(), false)); else it.next(); } return dates; } // 构建油价调整日event public VEvent genAdjustEvent(List dates) { VEvent event = new VEvent(); event.setSummary(String.format("油价调整(%d年)", year)); event.setDateStart(dates.get(0), false); event.setDuration(Duration.parse("P1D")); RecurrenceDates rdate = new RecurrenceDates(); rdate.getDates().addAll(dates); event.addRecurrenceDates(rdate); return event; } public void input() { //创建Scanner对象,接受从控制台输入 Scanner scan = new Scanner(System.in); last = Integer.parseInt(scan.nextLine()); year = Integer.parseInt(scan.nextLine()); workdays = DateTimeUtils.parseListICalDate(year, scan.nextLine()); restdays = DateTimeUtils.parseListICalDate(year, scan.nextLine()); } public void output() { ICalendar ical = new ICalendar(); //ical.addEvent(genWorkdayEvent()); ical.addEvent(genAdjustEvent(calcAdjustDates(genWorkdayEvent()))); System.out.println(Biweekly.write(ical).go()); } public static void main(String[] args) throws IOException { Oil oil = new Oil(); oil.input(); oil.output(); } }
31 2022 0129,0130,0402,0424,0507,1008,1009 0103,0131,0201,0202,0203,0204,0404,0405,0502,0503,0504,0603,0912,1003,1004,1005,1006,1007
各行含义
- 上年度最后一次调价日期(忽略年月)
- 年份
- 调班日期(忽略年份)
- 调休日期(忽略年份)
2022年油价调整日,iCalendar格式,保存成UTF-8编码文件。百度云盘链接:https://pan.baidu.com/s/1icpovyE4DXbqHHRftup0iA
提取码:lcq5,导入手机日历或Outlook,可提醒加油啦!
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Michael Angstadt//biweekly 0.6.3//EN BEGIN:VEVENT UID:dd296a09-4539-42db-83e4-b958f27ec031 DTSTAMP:20211025T231753Z SUMMARY:油价调整(2022年) DTSTART;VALUE=DATE:20220117 DURATION:P1D RDATE;VALUE=DATE:20220117,20220129,20220217,20220303,20220317,20220331,2022 0415,20220428,20220516,20220530,20220614,20220628,20220712,20220726,202208 09,20220823,20220906,20220921,20221010,20221024,20221107,20221121,20221205 ,20221219 END:VEVENT END:VCALENDAR油价调整日
20220117,20220129,20220217,20220303,20220317,20220331,20220415,20220428,20220516,20220530,20220614,20220628,20220712,20220726,20220809,20220823,20220906,20220921,20221010,20221024,20221107,20221121,20221205,20221219
源码库可访问https://gitee.com/taiqwu/oil-price-adjustment获取本文源代码和生成文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)