Johannes Bauer <[EMAIL PROTECTED]> wrote: > import time > localtime = time.localtime(1234567890) > fmttime = "%04d-%02d-%02d %02d:%02d:%02d" % (localtime[0], localtime[1], > localtime[2], localtime[3], localtime[4], localtime[5]) > print fmttime > > fmttime = "%04d-%02d-%02d %02d:%02d:%02d" % ([localtime[i] for i in > range(0, 5)])
To reduce typing, set format = '%04d-%02d-%02d %02d:%02d:%02d' Two problems. * Firstly, range(0, 5) == [0, 1, 2, 3, 4], so it's not big enough. Python tends to do this half-open-interval thing. Once you get used to it, you'll find that it actually reduces the number of off-by-one errors you make. * Secondly, the result of a list comprehension is a list; (Unsurprising, really, I know.) But the `%' operator only extracts multiple arguments from a tuple, so you'd need to convert: format % tuple(localtime[i] for i in xrange(6)] (I've replaced range by xrange, which avoids building an intermediate list, and the first argument to range or xrange defaults to zero anyway.) Another poster claimed that localtime returns a tuple. This isn't correct: it returns a time.struct_time, which is not a tuple as you can tell: >>> '%s' % localtime '(2009, 2, 13, 23, 31, 30, 4, 44, 0)' This is one of those times when Python's duck typing fails -- string formatting really wants a tuple of arguments, and nothing else will do. But you can slice a time.struct_time, and the result /is/ a genuine tuple: >>> type(localtime[:6]) <type 'tuple'> which is nice: >>> format % localtime[:6] '2009-02-13 23:31:30' But really what you wanted was probably >>> time.strftime('%Y-%m-%d %H:%M:%S', localtime) '2009-02-13 23:31:30' -- [mdw] -- http://mail.python.org/mailman/listinfo/python-list