On Fri, Dec 16, 2011 at 10:44 AM, Chris Angelico <ros...@gmail.com> wrote: > On Fri, Dec 16, 2011 at 8:45 PM, Ulrich Eckhardt > <ulrich.eckha...@dominolaser.com> wrote: >> I'm trying to create a struct_time that is e.g. one year ahead or a month >> back in order to test some parsing/formatting code with different dates. > > Do you need it to be one exact calendar year, or would it make sense > to add/subtract integers from a Unix time? > > t = time.time() + 365*86400 # Not actually a year ahead, it's 365 days ahead > t = time.localtime(t) # if you want a struct_time > > ChrisA > --
Not particularly elegant, but I believe accurate and relying only on the stated struct_time contract: #!/usr/bin/env python # 2.7.2 import time, itertools def is_local_time_different_by_one_year(time1, time2): if abs(time1.tm_year - time2.tm_year) != 1: return False if abs(time1.tm_mon - time2.tm_mon ) != 0: return False if abs(time1.tm_mday - time2.tm_mday) != 0: return False if abs(time1.tm_hour - time2.tm_hour) != 0: return False if abs(time1.tm_min - time2.tm_min ) != 0: return False if abs(time1.tm_sec - time2.tm_sec ) != 0: return False return True t = time.time() time1 = time.localtime(t) print("Local time is {}.".format(time1)) for i in itertools.count(0): t += 1 # Add one second until we have reached next year time2 = time.localtime(t) if is_local_time_different_by_one_year(time1, time2): print("One year later is {}".format(time2)) break Not exactly a speed demon, either: $ time python timediff.py Local time is time.struct_time(tm_year=2011, tm_mon=12, tm_mday=24, tm_hour=5, tm_min=57, tm_sec=44, tm_wday=5, tm_yday=358, tm_isdst=0). One year later is time.struct_time(tm_year=2012, tm_mon=12, tm_mday=24, tm_hour=5, tm_min=57, tm_sec=44, tm_wday=0, tm_yday=359, tm_isdst=0) real 3m8.922s user 2m2.470s sys 1m1.760s -- http://mail.python.org/mailman/listinfo/python-list