2022年油价调整日

2022年油价调整日,第1张

2022年油价调整日 2022年油价调整

百度云盘链接: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日
运行程序Oil.java

可从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

各行含义

  1. 上年度最后一次调价日期(忽略年月)
  2. 年份
  3. 调班日期(忽略年份)
  4. 调休日期(忽略年份)
输出

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获取本文源代码和生成文件。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5162990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存