modifying a time.struct_time
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Dec 16 05:44:49 EST 2011
On Fri, 16 Dec 2011 10:45:22 +0100, Ulrich Eckhardt wrote:
> Hi!
>
> 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.
[...]
> The second approach is this:
>
> l = list(t) # convert to a sequence
> l[0] += 1 # increment year
> t = time.struct_time(l) # convert to a struct_time
>
> This works but is ugly, because the code relies on the order inside the
> list and uses magic numbers to access them. The order is AFAICT not
> accessible programmatically but only documented, and not even in a way
> that makes clear that it is part of the API and as such actualy
> guaranteed. I could try to assert that the indices match using "if l[0]
> is t.tm_year", but this is still ugly.
Feel free to propose a feature enhancement to time.struct_time, but the
order of the fields is stable and won't change. So ugly or not, that way
is guaranteed to work.
[...]
> Then I tried duck typing. If it quacks like a duck, it better not be a
> crocodile! This looks like this:
>
> struct my_time(object): pass
"struct"?
[...]
> Does anyone have a suggestion how to solve this elegantly and
> pythonically? Also, what I'm wondering is if the lack of a clear way
> should be considered a bug or not.
Not a bug, but it does seem a very old and inelegant API more suited to
hairy C programmers gathered around a smokey fire in a cave chewing on
old dinosaur bones, and not worthy of space-age Python coders flying
around on anti-gravity belts.
--
Steven
More information about the Python-list
mailing list