>>> import time
>>> str = '2009-03-04'
>>> format = '%Y-%m-%d'
>>> time.mktime(time.strptime(str, format))
1236121200.0
>>> int(_)
1236121200
and here you have your epoch (if you just need seconds, use int()).
A blog about things I do: Debian, Linux, Python, whatever
>>> import time
>>> str = '2009-03-04'
>>> format = '%Y-%m-%d'
>>> time.mktime(time.strptime(str, format))
1236121200.0
>>> int(_)
1236121200
6 comments:
Alternatively, `date -d'2009-03-04' '+%s'`
This recipe is incorrect, sorry. :/
Consider this edge case and it becomes a bit more obvious:
>>> fmt = '%Y-%m-%d'
>>> str = '1970-01-01'
>>> mktime(strptime(str, fmt))
18000.0
>>>
Clearly the value for Jan 1, 1970 should be 0. The trouble is that mktime assumes a time tuple in localtime, whereas epoch offsets are always GMT or UTC. You need to adjust for your local timezone. This gets to be prohibitively complex as you desire more accuracy (for example, mktime(gmtime(0)) tells you how offset your local timezone was on Jan 1, 1970, but that's not necessarily the same as the offset for the actual date you're operating on - DST is a major (but not the only) factor in throwing that off).
overwriting python's built in types is very poor form. Try:
s = '1970-01-01'
or:
string = '1970-01-01'
I also wanted a way to look up these conversions, so I made a more general tool:
http://bigasterisk.com/python-date-convert/
I'm just adding what Joss suggested on IRC:
>>> from datetime import datetime
>>> string = '2009-03-04'
>>> format = '%Y-%m-%d'
>>> datetime.strptime(string, format).strftime('%s')
'1236121200'
and here's the comment of Wayne Witzel at http://pieceofpy.com/2010/12/29/response-convert-date-to-epoch :
>>> import time, calendar
>>> ts = time.strptime('2010-12-01', '%Y-%m-%d')
>>> calendar.timegm(ts)
1291161600
>>> ts = time.strptime('1970-01-01', '%Y-%m-%d')
>>> calendar.timegm(ts)
0
PS: thanks to all that have commented and/or criticizes the recipe :)
Post a Comment