Mercurial > hg > config
comparison python/parse_date.py @ 716:ca1f21d9e621
parse date example
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Thu, 23 Oct 2014 14:08:17 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
715:beb501ba919f | 716:ca1f21d9e621 |
---|---|
1 #!/usr/bin/env python | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 parse date | |
6 """ | |
7 | |
8 # imports | |
9 import argparse | |
10 import calendar | |
11 import datetime | |
12 import sys | |
13 import time | |
14 from .formatting import format_table | |
15 from dateutil.parser import parse | |
16 | |
17 | |
18 __all__ = ['main', 'parse_date', 'epoch2local', 'epoch2utc', 'is_dst', 'timezone'] | |
19 | |
20 | |
21 def is_dst(localtime=None): | |
22 """returns if daylight savings time is in effect locally""" | |
23 return time.localtime(localtime).tm_isdst > 0 | |
24 | |
25 | |
26 def timezone(localtime=None): | |
27 """returns name of local timezone""" | |
28 return time.tzname[int(is_dst(localtime))] | |
29 | |
30 | |
31 def epoch2local(datestamp): | |
32 """convert epoch to local time""" | |
33 return datetime.datetime.fromtimestamp(float(datestamp)) | |
34 | |
35 | |
36 def epoch2utc(datestamp): | |
37 """convert epoch to UTC""" | |
38 return datetime.datetime.utcfromtimestamp(float(datestamp)) | |
39 | |
40 | |
41 def parse_date(datestamp, utc=False): | |
42 """returns seconds since epoch from the supplied date""" | |
43 | |
44 try: | |
45 # already epoch timestamp | |
46 return float(datestamp) | |
47 except ValueError: | |
48 pass | |
49 | |
50 # parse the string | |
51 parsed_date = parse(datestamp) | |
52 | |
53 # convert this to seconds since epoch | |
54 if utc: | |
55 return float(calendar.timegm(parsed_date.timetuple())) | |
56 else: | |
57 return time.mktime(parsed_date.timetuple()) | |
58 | |
59 | |
60 def main(args=sys.argv[1:]): | |
61 | |
62 # parse command line | |
63 parser = argparse.ArgumentParser(description=__doc__) | |
64 parser.add_argument('date', nargs='+', | |
65 help="local date to parse") | |
66 parser.add_argument('--utc', dest='utc', | |
67 action='store_true', default=False, | |
68 help="indicate date is in UTC") | |
69 options = parser.parse_args(args) | |
70 | |
71 # parse each date | |
72 epochs = [parse_date(d, options.utc) for d in options.date] | |
73 | |
74 # display results | |
75 header = ['epoch', 'local', 'UTC'] | |
76 print (format_table([[d, '{} {}'.format(epoch2local(d), timezone(d)), epoch2utc(d)] for d in epochs], | |
77 header=header, joiner='|')) | |
78 | |
79 | |
80 if __name__ == '__main__': | |
81 main() |