Time - get yesterdays date
Question: I'm trying to get todays and yesterdays time using Python's `time` module.

This for me works for todays date:

    
    
    dt = time.strptime(time.strftime("%d/%m/%Y"),'%d/%m/%Y')
    

But I don't know how to get yesterdays date. I've found many tutorials where
the `datetime` module is used but nothing where `time` module is used.

How can I do that? And is there a better way to get todays date
(`struct_time`)?


Answer: To get yesterday's `struct_time`, use any of many [existing `datetime`
solutions](http://stackoverflow.com/a/15345064/4279) and call `.timetuple()`
to get `struct_time` e.g.:

    
    
    #!/usr/bin/env python
    from datetime import date, timedelta
    
    today = date.today()
    yesterday = today - timedelta(1)
    print(yesterday.timetuple())
    # -> time.struct_time(tm_year=2015, tm_mon=4, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=112, tm_isdst=-1)
    

It produces the correct day in the local timezone even around DST transitions.

See [How can I subtract a day from a python
date?](http://stackoverflow.com/a/25427822/4279) if you want to find the
corresponding UTC time (get yesterday as an aware `datetime` object).

* * *

You could also get yesterday using only `time` module (but less directly):

    
    
    #!/usr/bin/env python
    import time
    
    def posix_time(utc_time_tuple):
        """seconds since Epoch as defined by POSIX."""
        # from https://gist.github.com/zed/ff4e35df3887c1f82002
        tm_year = utc_time_tuple.tm_year - 1900
        tm_yday = utc_time_tuple.tm_yday - 1
        tm_hour = utc_time_tuple.tm_hour
        tm_min = utc_time_tuple.tm_min
        tm_sec = utc_time_tuple.tm_sec
        # http://pubs.opengroup.org/stage7tc1/basedefs/V1_chap04.html#tag_04_15
        return (tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 +
                (tm_year-70)*31536000 + ((tm_year-69)//4)*86400 -
                ((tm_year-1)//100)*86400 + ((tm_year+299)//400)*86400)
    
    now = time.localtime()
    yesterday = time.gmtime(posix_time(now) - 86400)
    print(yesterday)
    # -> time.struct_time(tm_year=2015, tm_mon=4, tm_mday=22, tm_hour=22, tm_min=6, tm_sec=16, tm_wday=2, tm_yday=112, tm_isdst=0)
    

It assumes that `time.gmtime()` accepts POSIX timestamp on the given platform
([Python's stdlib breaks otherwise](http://bugs.python.org/issue22356) e.g.,
if non-POSIX `TZ=right/UTC` is used). `calendar.timegm()` could be used
instead of `posix_time()` but the former may use `datetime` internally.

Note: `yesterday` represents local time in both solutions (`gmtime()` is just
a simple way to implement subtraction here). Both solutions use naive
timezone-unaware time objects and therefore the result may be ambiguous or
even non-existent time though unless the local timezone has skipped yesterday
(e.g., Russia had skipped several days in February 1918) then the date is
correct anyway.

