Difference between revisions of "GenDates.py"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
(One intermediate revision by the same user not shown) | |||
Line 4: | Line 4: | ||
#!/usr/bin/env python | #!/usr/bin/env python | ||
# | # | ||
# Purpose: Generate | # Purpose: Generate date range | ||
# | # | ||
# $Id:$ | # $Id:$ | ||
Line 11: | Line 11: | ||
""" | """ | ||
Usage: | Usage: gen_date_range.py [-v] [-d] [-D2] [-S <start_date> [-E <end_date>]] | ||
... | ... | ||
Line 20: | Line 20: | ||
import sys | import sys | ||
import getopt | import getopt | ||
import logging | |||
#------------------------------------------------------------------------------- | #------------------------------------------------------------------------------- | ||
Line 28: | Line 29: | ||
__version__ = "1.0.0" | __version__ = "1.0.0" | ||
__id__ = "@(#) | __id__ = "@(#) gen_date_range.py [%s] 2008-07-15" | ||
verbose_flg = False | verbose_flg = False | ||
Line 43: | Line 44: | ||
6 : 'Sun' | 6 : 'Sun' | ||
} | } | ||
START = datetime(day=1, month=1, year=2007) | |||
#=============================================================================== | #=============================================================================== | ||
Line 56: | Line 59: | ||
#------------------------------------------------------------------------------- | #------------------------------------------------------------------------------- | ||
def | def date_range(start=None, end=None, no_days=None): | ||
d_start = | |||
d_end = | if start: | ||
d_start = start | |||
else: | |||
d_start = START | |||
if end: | |||
d_end = end | |||
elif no_days: | |||
d_end = d_start + timedelta(days=no_days) | |||
else: | |||
d_end = datetime.now() | |||
d = d_start | d = d_start | ||
Line 65: | Line 77: | ||
while d < d_end: | while d < d_end: | ||
dow = d.weekday() | dow = d.weekday() | ||
if dow < 5: | if dow < 5: | ||
print '%s,%s' % (d.strftime("%d/%m/%Y"), DoW[dow]) | print '%s,%s' % (d.strftime("%d/%m/%Y"), DoW[dow]) | ||
d += timedelta(days=1) | d += timedelta(days=1) | ||
#------------------------------------------------------------------------------- | #------------------------------------------------------------------------------- | ||
def | def generate_for_date_range(): | ||
dates = [] | dates = [] | ||
Line 90: | Line 104: | ||
global debug_level | global debug_level | ||
start_date = None | |||
end_date = None | |||
no_days = None | |||
try: | try: | ||
opts, args = getopt.getopt(argv, "dD:hn:vV?", | opts, args = getopt.getopt(argv, "dD:E:hn:S:t:vV?", | ||
["debug", "debug_level=", "help", "no_days=", "verbose", "version"]) | ["debug", "debug_level=", "end_date=", "help", | ||
"no_days=", "start_date=", "verbose", "version"]) | |||
except getopt.GetoptError: | except getopt.GetoptError: | ||
usage() | usage() | ||
return 2 | |||
for opt, arg in opts: | for opt, arg in opts: | ||
if opt in ("-d", "--debug"): | if opt in ("-d", "--debug"): | ||
debug_level | debug_level += 1 | ||
debug_flg = True | debug_flg = True | ||
elif opt in ('-D', "--debug_level"): | elif opt in ('-D', "--debug_level"): | ||
debug_level | debug_level = int(arg) | ||
elif opt in ('-n', "--no_days"): | |||
no_days = int(arg) | |||
elif opt in ("-t", "--target_date"): | elif opt in ("-t", "--target_date"): | ||
target_date = arg | target_date = datetime.strptime(arg, "%Y%m%d") | ||
elif opt in ("-E", "--end_date"): | |||
end_date = datetime.strptime(arg, "%Y%m%d") | |||
elif opt in ("-S", "--start_date"): | |||
start_date = datetime.strptime(arg, "%Y%m%d") | |||
elif opt in ("-h", "-?", "--help"): | elif opt in ("-h", "-?", "--help"): | ||
# print __doc__ | # print __doc__ | ||
usage() | usage() | ||
return 1 | return 1 | ||
elif opt in ("-v", "--verbose"): | elif opt in ("-v", "--verbose"): | ||
verbose_flg = True | verbose_flg = True | ||
if (debug_level > 0): print "Debugging level set to %d" % debug_level | if (debug_level > 0): print "Debugging level set to %d" % debug_level | ||
date_range(start=start_date, end=end_date, no_days=no_days) | |||
return 0 | return 0 | ||
Line 155: | Line 158: | ||
Date Who Description | Date Who Description | ||
-------- --- ------------------------------------------------------------ | -------- --- ------------------------------------------------------------ | ||
20060811 plh Initial implementation | |||
Problems to fix: | Problems to fix: | ||
Line 167: | Line 170: | ||
[[Category:Python]] | [[Category:Python]] | ||
[[Category:Examples]] |
Latest revision as of 17:07, 19 July 2009
Script
#!/usr/bin/env python # # Purpose: Generate date range # # $Id:$ # #------------------------------------------------------------------------------- """ Usage: gen_date_range.py [-v] [-d] [-D2] [-S <start_date> [-E <end_date>]] ... """ #------------------------------------------------------------------------------- import os import sys import getopt import logging #------------------------------------------------------------------------------- from datetime import datetime, timedelta #------------------------------------------------------------------------------- __version__ = "1.0.0" __id__ = "@(#) gen_date_range.py [%s] 2008-07-15" verbose_flg = False debug_level = 0 DoW = { 0 : 'Mon', 1 : 'Tue', 2 : 'Wed', 3 : 'Thu', 4 : 'Fri', 5 : 'Sat', 6 : 'Sun' } START = datetime(day=1, month=1, year=2007) #=============================================================================== def is_weekday(d): dow = d.weekday() if dow < 5: return True else: return False #------------------------------------------------------------------------------- def date_range(start=None, end=None, no_days=None): if start: d_start = start else: d_start = START if end: d_end = end elif no_days: d_end = d_start + timedelta(days=no_days) else: d_end = datetime.now() d = d_start while d < d_end: dow = d.weekday() if dow < 5: print '%s,%s' % (d.strftime("%d/%m/%Y"), DoW[dow]) d += timedelta(days=1) #------------------------------------------------------------------------------- def generate_for_date_range(): dates = [] for n in range(no_days): d = date - datetime.timedelta(days=n) print d.strftime("%y%m%d") dates.append(d) # print date.strftime("%y%m%d") for d in dates: generate(d) #=============================================================================== def main(argv): global verbose_flg global debug_level start_date = None end_date = None no_days = None try: opts, args = getopt.getopt(argv, "dD:E:hn:S:t:vV?", ["debug", "debug_level=", "end_date=", "help", "no_days=", "start_date=", "verbose", "version"]) except getopt.GetoptError: usage() return 2 for opt, arg in opts: if opt in ("-d", "--debug"): debug_level += 1 debug_flg = True elif opt in ('-D', "--debug_level"): debug_level = int(arg) elif opt in ('-n', "--no_days"): no_days = int(arg) elif opt in ("-t", "--target_date"): target_date = datetime.strptime(arg, "%Y%m%d") elif opt in ("-E", "--end_date"): end_date = datetime.strptime(arg, "%Y%m%d") elif opt in ("-S", "--start_date"): start_date = datetime.strptime(arg, "%Y%m%d") elif opt in ("-h", "-?", "--help"): # print __doc__ usage() return 1 elif opt in ("-v", "--verbose"): verbose_flg = True if (debug_level > 0): print "Debugging level set to %d" % debug_level date_range(start=start_date, end=end_date, no_days=no_days) return 0 #------------------------------------------------------------------------------- if __name__ == '__main__' or __name__ == sys.argv[0]: try: sys.exit(main(sys.argv[1:])) except KeyboardInterrupt, e: print "[gen_dates] Interrupted!" #------------------------------------------------------------------------------- """ Revision History: Date Who Description -------- --- ------------------------------------------------------------ 20060811 plh Initial implementation Problems to fix: To Do: Issues: """