Last active
October 4, 2018 18:33
-
-
Save ouyi/5724d0428dd1f10610f8526bb49117bf to your computer and use it in GitHub Desktop.
A command-line tool to work with dates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/usr/bin/env python | |
import sys, argparse, pytz | |
from datetime import datetime, timedelta | |
DEFAULT_DATETIME_FORMAT = '%Y%m%d' | |
SECONDS_IN_A_DAY = 3600 * 24 | |
def main(): | |
parser = argparse.ArgumentParser(description='A command-line tool to work with dates') | |
parser.add_argument('-a', '--range-start', help='the range start (inclusive)', required=True) | |
parser.add_argument('-o', '--range-stop', help='the range stop (exclusive)', required=True) | |
parser.add_argument('-e', '--range-step', default=SECONDS_IN_A_DAY, type=int, help='the range step, always in seconds') | |
parser.add_argument('-f', '--datetime-format', default=DEFAULT_DATETIME_FORMAT, help='the input and output datetime format, for details see: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior') | |
args = parser.parse_args() | |
range_start = datetime.strptime(args.range_start, args.datetime_format).replace(tzinfo=pytz.UTC) | |
range_stop = datetime.strptime(args.range_stop, args.datetime_format).replace(tzinfo=pytz.UTC) | |
range_step = timedelta(seconds=args.range_step) | |
print_range(generate_range(range_start, range_stop, range_step), args.datetime_format) | |
def generate_range(start, stop, step): | |
result = [] | |
d = start | |
while d < stop: | |
result.append(d) | |
d += step | |
return result | |
def print_range(datetime_range, datetime_format): | |
for d in datetime_range: | |
print(d.strftime(datetime_format)) | |
if __name__ == "__main__": | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/usr/bin/env python | |
from daterange import * | |
import unittest | |
class DaterangeTests(unittest.TestCase): | |
def test_generate_range(self): | |
datetime_format = '%Y-%m-%d' | |
range_start = datetime.strptime('2018-02-26', datetime_format).replace(tzinfo=pytz.UTC) | |
range_stop = datetime.strptime('2018-03-02', datetime_format).replace(tzinfo=pytz.UTC) | |
range_step = timedelta(seconds=SECONDS_IN_A_DAY) | |
expected = [ | |
datetime.strptime('2018-02-26', datetime_format).replace(tzinfo=pytz.UTC), | |
datetime.strptime('2018-02-27', datetime_format).replace(tzinfo=pytz.UTC), | |
datetime.strptime('2018-02-28', datetime_format).replace(tzinfo=pytz.UTC), | |
datetime.strptime('2018-03-01', datetime_format).replace(tzinfo=pytz.UTC) | |
] | |
self.failUnless(expected == generate_range(range_start, range_stop, range_step)) | |
def main(): | |
unittest.main() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage: