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()