python计算日期之间的放假日期

本文实例为大家分享了python计算日期之间的放假日期,供大家参考,具体内容如下

代码如下:

#encoding=utf-8 

print '中国' 

#自动查询节日 给定起始日期和结束日期,自动获取总共的节假日天数 

import datetime
from dateutil import rrule,easter 

try: set
except NameError: from sets import Set as set 

#复活节
def all_easter(start, end):
  easters = [easter.easter(y) for y in xrange(start.year,end.year+1)]
  return [d for d in easters if start<=d<=end] 

#开始到结束的节礼日列表
def all_boxing(start, end):
  one_day = datetime.timedelta(days=1)
  boxings = [easter.easter(y) + one_day for y in xrange(start.year,end.year+1)]
  return [d for d in boxings if start<=d<=end]  

#返回开始和结束日期之间的圣诞节列表
def all_christmas(start, end):
  christmases = [datetime.date(y,12,25) for y in xrange(start.year, end.year + 1)]
  return [d for d in christmases if start<=d<=end] 

#返回劳动节列表
def all_labor(start, end):
  labors = rrule.rrule(rrule.YEARLY, bymonth=9, byweekday=rrule.MO(1),dtstart=start, until=end)
  return [d.date() for d in labors] 

#读取设定的节假日
def read_holidays(start, end, holidays_file='holidays.txt'):
  try:
    holidays_file = open(holidays_file)
  except IOError,err:
    print 'open failed'
    return []
  holidays = [] 

  for line in holidays_file:
    if line.isspace() or line.startswith('#'):
      continue
    try:
      y,m,d = [int(x.strip()) for x in line.split(',')]
      date = datetime.date(y,m,d)
    except ValueError:
      print 'Invalid line find'
      continue
    if start <= date <=end:
      holidays.append(date)
  holidays_file.close()
  return holidays 

holidays_by_country = {
'US':(all_easter,all_christmas,all_labor),
'IT':(all_easter,all_boxing,all_labor)
} 

def holidays(cc,start,end,holidays_file='holidays.txt'):
  all_holidays= read_holidays(start,end,holidays_file)
  functions = holidays_by_country.get(cc,())
  for function in functions:
    all_holidays += function(start,end)
  all_holidays = list(set(all_holidays))
  return (len(all_holidays),all_holidays) 

test_file = open(r'D:\123.txt','w')
test_file.write('2014,3,23')
test_file.close() 

print holidays('US',datetime.date(2014,1,1),datetime.date(2014,12,31),r'D:\123.txt') 

打印结果如下:

中国
(4, [datetime.date(2014, 4, 20), datetime.date(2014, 12, 25), datetime.date(2014, 3, 23), datetime.date(2014, 9, 1)])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python计算两个日期相差天数的方法示例

    本文实例讲述了Python计算两个日期相差天数的方法.分享给大家供大家参考,具体如下: #!/usr/bin/python import time import sys def dateinput(): date = raw_input('please input the first date: ') return date def datetrans(tdate): spdate = tdate.replace("/","-") try: datesec = ti

  • python中关于时间和日期函数的常用计算总结(time和datatime)

    1.获取当前时间的两种方法: 复制代码 代码如下: import datetime,timenow = time.strftime("%Y-%m-%d %H:%M:%S")print nownow = datetime.datetime.now()print now 2.获取上个月最后一天的日期(本月的第一天减去1天) 复制代码 代码如下: last = datetime.date(datetime.date.today().year,datetime.date.today().mon

  • Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    python中的datetime模块提供了操作日期和时间功能,该模块提供了五种核心对象:datetime时间日期类型,date日期类型,time时间类型,tzinfo时区类型,timedelta时间差类型,今天为大家介绍一下datetime模块的具体使用方法与python日期时间计算与比较的相关实例 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象

  • python 计算两个日期相差多少个月实例代码

    近期,由于业务需要计算两个日期之前相差多少个月.我在网上找了很久,结果发现万能的python,居然没有一个模块计算两个日期的月数,像Java.C#之类的高级语言,都会有(date1-date2).months的现成方法,觉得不可思议.说句实在的,一直觉得python 的日期处理模块真心不好用. 哦,对了,别跟我说 datetime, calendar, dateutil 这些模块,因为我都试过了,都没用.有个竟然算出来还有错.datetime.timedelta只能计算出日时分秒.对年月却不支持

  • Python根据指定日期计算后n天,前n天是哪一天的方法

    本文实例讲述了Python根据指定日期计算后n天,前n天是哪一天的方法.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!/usr/bin/python3 import datetime def getday(y=2017,m=8,d=15,n=0): the_date = datetime.datetime(y,m,d) result_date = the_date + datetime.timedelta(days=n) d = result_date.st

  • Python 3.3实现计算两个日期间隔秒数/天数的方法示例

    本文实例讲述了Python 3.3实现计算两个日期间隔秒数/天数的方法.分享给大家供大家参考,具体如下: >>> import datetime >>> d1 = datetime.datetime.now() >>> d2 = datetime.datetime.now() >>> interval = d2 - d1 >>> interval datetime.timedelta(0, 14, 670206) &

  • python3获取两个日期之间所有日期,以及比较大小的实例

    如下所示: import datetime #获取两个日期间的所有日期 def getEveryDay(begin_date,end_date): date_list = [] begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d") end_date = datetime.datetime.strptime(end_date,"%Y-%m-%d") while begin_date <=

  • python计算N天之后日期的方法

    本文实例讲述了python计算N天之后日期的方法.分享给大家供大家参考.具体如下: python计算N天之后的日期,可以自己写成一个函数,想得到几天后的日期都行 #! /usr/bin/env python #coding=utf-8 import time import datetime d1 = datetime.datetime.now() d3 = d1 + datetime.timedelta(days =10) print str(d3) print d3.ctime() 输出结果如

  • python 实现得到当前时间偏移day天后的日期方法

    如下所示: import datetime #以当前时间作为起始点,days=-7向前偏移7天,days=7向后偏移7天 time_now = datetime.datetime.now() time = (time_now+datetime.timedelta(days=7)).strftime("%Y%m%d") print(time) 安装dateutil库,注意不是pip install dateutil,而是pip install python-dateutil import

  • python计算日期之间的放假日期

    本文实例为大家分享了python计算日期之间的放假日期,供大家参考,具体内容如下 代码如下: #encoding=utf-8 print '中国' #自动查询节日 给定起始日期和结束日期,自动获取总共的节假日天数 import datetime from dateutil import rrule,easter try: set except NameError: from sets import Set as set #复活节 def all_easter(start, end): easte

  • 利用Java中Calendar计算两个日期之间的天数和周数

    前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每个月的天数各不同:阴(农)历,每个月固定28天 每周的第一天 - 阳(公)历星期日是第一天:阴(农)历,星期一是第一天 实际上,在历史上有着许多种纪元的方法.它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期.所以为了计时

  • PHP使用strtotime计算两个给定日期之间天数的方法

    本文实例讲述了PHP使用strtotime计算两个给定日期之间天数的方法.分享给大家供大家参考.具体分析如下: PHP的strtotime函数用于将任何英文文本的日期时间描述解析为Unix时间戳.这个函数将使用TZ环境变量(如果有的话)来计算时间戳.如果执行成功它返回一个时间戳,否则返回FALSE.在PHP 5.1.0之前,这个函数将返回-1. $date1 = date('Y-m-d'); $date2 = '2005-03-01′; $days = (strtotime() – strtot

  • 详解python 字符串和日期之间转换 StringAndDate

    python 字符串和日期之间转换 StringAndDate           这里给出实现代码,直接可以使用.大家可以看下. 实例代码: ''''' Created on 2013-7-25 @author: Administrator ''' from datetime import datetime class StringAndDate(object): ''''' String to Date(datetime) or date to string ''' def stringTo

  • Android编程实现计算两个日期之间天数并打印所有日期的方法

    本文实例讲述了Android编程实现计算两个日期之间天数并打印所有日期的方法.分享给大家供大家参考,具体如下: 以下代码是计算两个日期之间的天数,并打印所有日期 注:开始时,增加天数时,一天的毫秒数直接用24*60*60*1000来逐步增加天数,再测试时发现,当两个日期之间的天数超过24天时,打印的日期反而在开始日期之前了,(如打印2016/12/18-2017/1/23,打印的日期反而有2016/12/1),后来发现原因在于24*60*60*1000是一个int值,int值的取值范围在2的31

  • Python计算指定日期是今年的第几天(三种方法)

    今天早上和腾讯面试官进行了视频面试,由于音量和网络以及我的垃圾电脑的原因,个人感觉黄了... 最后面试官给了我一道简单的计算题:指定日期是今年的第几年 由于电脑卡到打字都打不动,我勉勉强强写了一点,虽然面试官知道了我的想法也了解我的设备情况,最后没让我写完 但是心里惭愧还是时候补齐了...话不多说回到主题吧 首先是输入的问题,个人认为分别输入年月份是一件很初级的要求,就实现了形如"2020-3-26"的字符串解析的两种方法,代码如下: def cal_date_str_spilt(da

  • Python利用zhdate模块实现农历日期处理

    目录 简介 安装 主要功能 源码 简介 zhdate模块统计从1900年到2100年的农历月份数据代码,支持农历和公历之间的转化,并且支持日期差额运算. 安装 pip install zhdate 主要功能 1.获取公历对应的农历日期 2.获取中文描述农历日期 3.计算公历距离农历差额 获取公历对应的农历日期:格式ZhDate.from_datetime(datetime(year, month, day)) print(ZhDate.from_datetime(datetime(2022, 3

随机推荐