Skip to content

Instantly share code, notes, and snippets.

@mattjj
Created February 9, 2014 15:58
Show Gist options
  • Save mattjj/8901091 to your computer and use it in GitHub Desktop.
Save mattjj/8901091 to your computer and use it in GitHub Desktop.
timesince
#!/usr/bin/env python
from __future__ import division
import sys
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
from datetime import datetime
from collections import OrderedDict
# from https://en.wikipedia.org/wiki/Year
DAYS_PER_JULIAN_YEAR = 365.25
DAYS_PER_AVERAGE_YEAR = 365.2425 # Google uses this one
def maxstrlen(items):
return max(len(str(elt)) for elt in items)
def dict_print(d):
fmt = '{:>%d} {:<%d}' % (maxstrlen(d.values()), maxstrlen(d.keys()))
print '\n'.join(fmt.format(v,k) for k,v in d.iteritems())
def get_time_since(datestr,total=False):
if not total:
rd = relativedelta(datetime.now(), parse(datestr))
return OrderedDict((key,getattr(rd,key)) for key in
('years','months','days','hours','minutes','seconds','microseconds'))
else:
td = datetime.now() - parse(datestr)
return OrderedDict([
('total (%s-day Julian) years'
% DAYS_PER_JULIAN_YEAR,td.days/DAYS_PER_JULIAN_YEAR),
('total (%s-day average) years'
% DAYS_PER_AVERAGE_YEAR,td.days/DAYS_PER_AVERAGE_YEAR),
('total days',td.days),
('total seconds',td.total_seconds()),
])
if __name__ == '__main__':
datestr = ' '.join(sys.argv[1:])
dict_print(get_time_since(datestr))
print ''
print '... which is'
dict_print(get_time_since(datestr,total=True))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment