python生成全年日期表

#!usr/bin/env python
# encoding:utf-8
# from __future__ import division

import requests
import json

from dateutil.relativedelta import relativedelta
import math
import logging
import os
import sys
# from datetime import datetime
from odps import ODPS,DataFrame
import collections
 
import time
import datetime
day_list=[]
month_list = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
month_day_dict = {
    "01": 31,
    "02": 28,
    "03": 31,
    "04": 30,
    "05": 31,
    "06": 30,
    "07": 31,
    "08": 31,
    "09": 30,
    "10": 31,
    "11": 30,
    "12": 31,
}
 
 
def string2Datetime(timestamp, format="%Y-%m-%d %H:%M:%S"):
    # """
    # 把字符串转成datetime
    # """
    return datetime.datetime.strptime(timestamp, format)
 
 
def judgeRunYear(year):
    # """
    # 判断是否是闰年
    # """
    if (year % 100 != 0 and year % 4 == 0) or (year % 100 == 0 and year % 400 == 0):
        return True
    else:
        return False
 
 
def generateMonthDays(month_day_dict, year="2017", month="03"):
    # """
    # 生成指定年份、月份中的所有日期
    # """
    day_num = month_day_dict[month]
    day_date_list = []
    for i in range(1, day_num + 1):
        one = str(i)
        if len(one) == 1:
            one = "0" + one
        day_date_list.append(year + "-" + month + "-" + one)
    return day_date_list
 
 
def genenrateYearDays(year):
    # """
    # 生成一年中所有的日期
    # """
    res_list = []
    if judgeRunYear(year):
        month_day_dict["02"] = 29
    for one_mon in month_list:
        one_mon_day = generateMonthDays(month_day_dict, year=str(year), month=one_mon)
        res_list += one_mon_day
    return res_list
 
 
def singleDateHandle(day="2019-07-19", format="%Y-%m-%d"):
    # """
    # 单日处理
    # """
    T = string2Datetime(day, format=format)
    weekDay = T.weekday() + 1
    weekNum = T.isocalendar()[1]
    return weekDay, weekNum
 
 
def genenrateYearDaysWeek(year):
    # """
    # 计算生成一年中每一天属于 第几周  周几
    # """
    year_day_list = genenrateYearDays(year)
    for one_day in year_day_list:
        weekDay, weekNum = singleDateHandle(day=one_day)
        weekOfMonth = get_week_of_month(year= int(one_day[0:4]), month=int(one_day[5:7]), day=int(one_day[8:10]))
        print("{0} is:  {1}th week, {2}th day, {3}th weekofmonth.".format(one_day, weekNum, weekDay,weekOfMonth))
        obj={"date":one_day,"weekth":weekNum,"weekday":weekDay,"weekofmonth":weekOfMonth}
        day_list.append(obj)

def get_week_of_month(year, month, day):
    """
    获取指定的某天是某个月的第几周
    """

    begin = int(datetime.date(year, month, 1).strftime("%W"))
    end = int(datetime.date(year, month, day).strftime("%W"))

    return end - begin + 1
 
 
if __name__ == "__main__":
    date='${bizdate}'
    year=date[0:4]

    print(int(year))
    genenrateYearDaysWeek(int(year))
    print(len(day_list))
    # 增加odps引擎
    maxcompute_db = ODPS('码', '码', "${syc_ods}",endpoint='https://码/api')
    insert_sql = ''
    data_lists = []
    # 遍历插入odps表   
    for obj in day_list:
        mdate=datetime.datetime.strptime(str(obj["date"]),'%Y-%m-%d')
        weekth=str(obj["weekth"])
        weekday=str(obj["weekday"])
        weekofmonth = str(obj['weekofmonth'])
    
        data_list = "(uuid(),	'" + str(mdate) + "','" + weekth + "','" + weekday + "','" + weekofmonth + "',null,null,null,null,null,null,null),"
        data_lists.append(data_list)
    
    print("准备执行SQL")
    insert_sql = 'insert OVERWRITE table ${syc_ods}.ods_year_day_list partition(ds=${bizdate}) values {}'.format('\n'.join(data_lists))
    insert_sql=insert_sql[0:len(insert_sql)-1]
    # print(insert_sql)
    # 执行SQL
    maxcompute_db.execute_sql(insert_sql)
    print("成功执行SQL")

# from datetime import datetime
 
# time = '20190801'
 
# date = datetime.strptime(time,'%Y%m%d')







# CREATE TABLE IF NOT EXISTS syc_ods_dev.ods_year_day_list (
# id STRING  COMMENT '主键',
# mdate datetime COMMENT '日期',
# weekth int COMMENT '第几周',
# weekday int COMMENT '星期几',
# weekofmonth int COMMENT '本月第几周',
# vacation_name int COMMENT '接入标记',
# legal_holidays int COMMENT '是否法定假日',
# res1 STRING comment '备用字段1',
# res2 STRING comment '备用字段2',
# res3 STRING comment '备用字段3',
# res4 STRING comment '备用字段4',
# res5 STRING comment '备用字段5') 
# COMMENT '生成全年日历表' PARTITIONED BY (ds STRING COMMENT '分区');



  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值