annotate numerics/parse_date.py @ 150:8a1fe454c98a

STUB
author Jeff Hammel <k0scist@gmail.com>
date Mon, 13 Apr 2015 10:17:47 -0700
parents 3a1f04f33feb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4 """
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 parse date
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6 """
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
7
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8 import argparse
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9 import datetime
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10 import sys
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11 import time
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 from .formatting import format_table
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13 from dateutil.parser import parse
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15 __all__ = ['main', 'parse_date', 'epoch2local', 'epoch2utc', 'is_dst', 'timezone']
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 def is_dst(localtime=None):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 """returns if daylight savings time is in effect locally"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 return time.localtime(localtime).tm_isdst > 0
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 def timezone(localtime=None):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 """returns name of local timezone"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 return time.tzname[int(is_dst(localtime))]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25 def epoch2local(datestamp):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
26 """convert epoch to local time"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
27 return datetime.datetime.fromtimestamp(float(datestamp))
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
28
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
29 def epoch2utc(datestamp):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
30 """convert epoch to UTC"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
31 return datetime.datetime.utcfromtimestamp(float(datestamp))
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
32
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
33
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
34 def parse_date(datestamp):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
35 """returns seconds since epoch from the supplied date"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
36
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
37 try:
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
38 # already epoch timestamp
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
39 return float(datestamp)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
40 except ValueError:
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
41 pass
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
42
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
43 # parse the string
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
44 parsed_date = parse(datestamp)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
45
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
46 # convert this to seconds since epoch
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
47 return time.mktime(parsed_date.timetuple())
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
48
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
49
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
50 def main(args=sys.argv[1:]):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
51
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
52 # parse command line
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
53 parser = argparse.ArgumentParser(description=__doc__)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
54 parser.add_argument('date', nargs='+',
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
55 help="local date to parse")
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
56 options = parser.parse_args(args)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
57
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
58 # parse each date
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
59 epochs = [parse_date(d) for d in options.date]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
60
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
61 # display results
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
62 header = ['epoch', 'local', 'UTC']
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
63 print (format_table([[d, '{} {}'.format(epoch2local(d), timezone(d)), epoch2utc(d)] for d in epochs],
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
64 header=header, joiner='|'))
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
65
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
66
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
67 if __name__ == '__main__':
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
68 main()