Beispiel #1
0
def special_holiday_encode(date, freq="D"):
    """
    Verify whether the given date is a holiday or special day like 11.11 or 03.08
    :param date:
    :param freq:
    :return:
    """
    if freq == "D":
        day_type = chinese_calendar.get_holiday_detail(date)[1]
        if day_type:
            return day_type
        elif date.month == 11 and date.day == 11:
            return "double11"
        elif date.month == 3 and date.day == 8:
            return "female"
        else:
            return "normal"

    elif freq == "7D":
        weekdays = range(7)

        for day in weekdays:
            week_day = get_specific_weekday_by_date(date, day)
            day_type = chinese_calendar.get_holiday_detail(week_day)[1]
            if day_type:
                return day_type
            elif week_day.month == 3 and week_day.day == 8:
                return "female"
            elif week_day.month == 11 and week_day.day == 11:
                return "double11"
            continue

        return "normal"
def getDetailHoliday(date):
    april_last = datetime.strptime(str(date), '%Y%m%d')
    on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
    if (on_holiday == True and holiday_name is not None):
        return 1
    else:
        return 0
Beispiel #3
0
    def __init__(self, w_date):
        # w_date_f = datetime.datetime.strptime(w_date, '%Y-%m-%d %H:%M')

        # self.w_res = chinese_calendar.is_workday(w_date_f)
        w_date_f = CalDatetime(w_date).dt_all()
        self.w_res = chinese_calendar.is_workday(w_date_f)
        on_holiday, holiday_name = chinese_calendar.get_holiday_detail(
            w_date_f)
Beispiel #4
0
    def __init__(self, w_date):
        # w_date_f = datetime.datetime.strptime(w_date, '%Y-%m-%d %H:%M')

        # self.w_res = chinese_calendar.is_workday(w_date_f)
        self.w_res = chinese_calendar.is_workday(w_date)
        on_holiday, holiday_name = chinese_calendar.get_holiday_detail(w_date)
        print("is work day?", self.w_res)
        print("is holiday?", on_holiday)
        print("holiday name?", holiday_name)
Beispiel #5
0
 def test_detail(self):
     cases = [
         ((2018, 2, 10), (True, None)),
         ((2018, 2, 11), (False, Holiday.spring_festival.value)),
         ((2018, 2, 12), (False, None)),
         ((2018, 2, 15), (True, Holiday.spring_festival.value)),
     ]
     for date, expected_result in cases:
         self.assertEqual(expected_result, get_holiday_detail(datetime.date(*date)))
Beispiel #6
0
def is_festival(date):
    """
    判断是否为节日
    注意:有些时间属于相关节日的调休日也会显示出节日名称,可参考源码https://pypi.org/project/chinesecalendar/
    """
    Y = date.year
    M = date.month
    D = date.day
    april_last = datetime.date(Y, M, D)
    on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
    return on_holiday, holiday_name
Beispiel #7
0
    def is_workday(self):
        # april_last = datetime.date(2020, 10, 1)
        str_p = '2020-06-20 09:40'
        april_last = datetime.datetime.strptime(str_p, '%Y-%m-%d %H:%M')
        print(april_last)

        result = chinese_calendar.is_workday(april_last)
        on_holiday, holiday_name = chinese_calendar.get_holiday_detail(
            april_last)
        print("is work day?", result)
        print("is holiday?", on_holiday)
        print("holiday name?", holiday_name)
    def test_same_code_as_readme(self):
        import datetime

        # Check if 2018-04-30 is holiday in China
        from chinese_calendar import is_workday, is_holiday
        april_last = datetime.date(2018, 4, 30)
        self.assertFalse(is_workday(april_last))
        self.assertTrue(is_holiday(april_last))

        # or check and get the holiday name
        import chinese_calendar as calendar  # with different import style
        on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
        self.assertTrue(on_holiday)
        self.assertEqual(calendar.Holiday.labour_day.value, holiday_name)
Beispiel #9
0
    def test_same_code_as_readme_english(self):
        import datetime

        # Check if 2018-04-30 is holiday in China
        from chinese_calendar import is_holiday, is_workday

        april_last = datetime.date(2018, 4, 30)
        assert is_workday(april_last) is False
        assert is_holiday(april_last) is True

        # or check and get the holiday name
        import chinese_calendar as calendar  # 也可以这样 import

        on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
        assert on_holiday is True
        assert holiday_name == calendar.Holiday.labour_day.value

        # even check if a holiday is in lieu
        import chinese_calendar

        assert chinese_calendar.is_in_lieu(datetime.date(2006, 2, 1)) is False
        assert chinese_calendar.is_in_lieu(datetime.date(2006, 2, 2)) is True
Beispiel #10
0
    def test_same_code_as_readme_chinese(self):
        import datetime

        # 判断 2018年4月30号 是不是节假日
        from chinese_calendar import is_holiday, is_workday

        april_last = datetime.date(2018, 4, 30)
        assert is_workday(april_last) is False
        assert is_holiday(april_last) is True

        # 或者在判断的同时,获取节日名
        import chinese_calendar as calendar  # 也可以这样 import

        on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
        assert on_holiday is True
        assert holiday_name == calendar.Holiday.labour_day.value

        # 还能判断法定节假日是不是调休
        import chinese_calendar

        assert chinese_calendar.is_in_lieu(datetime.date(2006, 2, 1)) is False
        assert chinese_calendar.is_in_lieu(datetime.date(2006, 2, 2)) is True
 def _get_holidays(x):
     is_holiday, holiday_name = calendar.get_holiday_detail(x)
     if holiday_name in select_holidays and is_holiday:
         return holiday_name
Beispiel #12
0
    :param year: which year
    :param include_weekends: False for excluding Saturdays and Sundays
    :return: list
    """
    if not year:
        year = datetime.datetime.now().year
    else:
        year = year
    start = datetime.date(year, 1, 1)
    end = datetime.date(year, 12, 31)
    holidays = chinese_calendar.get_holidays(start, end, include_weekends)
    return holidays


b = get_holidays(2022, False)
days = {}
for i in b:
    on_holiday, english_name = chinese_calendar.get_holiday_detail(i)
    holiday_name = chinese_calendar.Holiday(english_name).chinese  # 劳动节
    # print(i,on_holiday,holiday_name)
    if holiday_name not in days:
        days[holiday_name] = i

print("你好,摸鱼人,工作再累,一定不要忘记摸鱼哦 ! 有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着。多喝点水,钱是老板的,但命是自己的!\n")
for i in days:
    b = get_countDay(days[i], i)
    if b:
        print(b)

os.system("pause")
Beispiel #13
0
def query_h():
    today = datetime.now()
    on_holiday, holiday_name = calendar.get_holiday_detail(today)
    return on_holiday, holiday_name
Beispiel #14
0
import datetime

# 判断 2018年4月30号 是不是节假日
from chinese_calendar import is_workday, is_holiday
april_last = datetime.date(2018, 4, 30)
print(april_last)

# 或者在判断的同时,获取节日名
import chinese_calendar as calendar  # 也可以这样 import
on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
print(on_holiday)
print(holiday_name)

# 还能判断法定节假日是不是调休
import chinese_calendar
print(chinese_calendar.is_in_lieu(datetime.date(2006, 1, 1)))
print(chinese_calendar.is_in_lieu(datetime.date(2006, 1, 2)))

# python -m test.test_workdays
Beispiel #15
0
def overtime(worktimes):
    data = {}
    for name in worktimes:
        for worktime in worktimes[name]:
            start = dateutil.parser.parse(
                worktime['start']) if worktime['start'] else None
            end = dateutil.parser.parse(
                worktime['end']) if worktime['end'] else None
            today = dateutil.parser.parse(worktime['day'])
            yesterday = today - datetime.timedelta(1)
            tommorrow = today + datetime.timedelta(1)
            #  print(start, end ,today,yesterday,tommorrow,work_start_time(today),work_end_time(today))
            workday = chinese_calendar.is_workday(start)
            lieu = chinese_calendar.is_in_lieu(start)
            holiday, holiday_name = chinese_calendar.get_holiday_detail(start)
            holiday_name = WEEKDAY[
                start.weekday()] if not holiday_name else holiday_name
            #  if not workday:
            #      holiday, holiday_name = chinese_calendar.get_holiday_detail(o.start)
            #      if holiday_name:
            #          o.holiday_name = holiday_name

            if name not in data:
                data[name] = {'overtime': []}
            w = data[name]['overtime']

            overtime = None
            if workday:
                # 如果首次提交时间小于上班时间,则认为是昨天的通宵加班
                if start is not None and start < work_start_time(today):
                    overtime = OverTime(yesterday, name)
                    overtime.start = work_end_time(today)
                    overtime.end = start

                # 如果最后一次提交大于下班时间,且没有到0点
                if end is not None and end > work_end_time(
                        today) and end < tommorrow:
                    overtime = OverTime(today, name)
                    overtime.start = work_end_time(today)
                    overtime.end = end
            else:
                if start is not None and start > work_start_time(today):
                    overtime = OverTime(today, name)
                    overtime.start = work_start_time(today)
                    if end is None:
                        overtime.end = work_end_time(today)
                    else:
                        overtime.end = end if end > work_end_time(
                            today) else work_end_time(today)

            if overtime is None:
                continue
            overtime.duration = math.ceil(
                (overtime.end - overtime.start).seconds / 3600.0)
            overtime.workday = workday
            overtime.holiday = holiday
            overtime.holiday_name = holiday_name
            overtime.lieu = lieu
            w.append(overtime)

    return data