Как получить строку ISO8601 для даты и времени с миллисекундами вместо микросекунд в Python 3.5 - PullRequest
0 голосов
/ 23 октября 2018

Учитывая следующее время:

d = datetime.datetime(2018, 10, 9, 8, 19, 16, 999578, tzinfo=dateutil.tz.tzoffset(None, 7200))

d.isoformat () приводит к строке:

'2018-10-09T08:19:16.999578+02:00'

Как получить строку с миллисекундами вместо микросекунд:

'2018-10-09T08:19:16.999+02:00'

strftime () не будет работать здесь:% z возвращает 0200 вместо 02:00 и имеет только% f для получения микросекунд, для миллисекунд нет заполнителя.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Думаете, вы могли бы сделать это, используя strftime?

d.strftime("%Y-%m-%dT%H:%M:%S.") + str(d.microsecond//1000)
0 голосов
/ 23 октября 2018

Если часовой пояс без двоеточия в порядке, вы можете использовать

d = datetime.datetime(2018, 10, 9, 8, 19, 16, 999578, 
                      tzinfo=dateutil.tz.tzoffset(None, 7200))
s = d.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + d.strftime('%z')
# '2018-10-09T08:19:16.999+0200'

Для двоеточия вам нужно разделить часовой пояс и добавить его туда самостоятельно.%z также не выдает Z для UTC.


И Python 3.6 поддерживает timespec='milliseconds', поэтому вам следует добавить следующее:

try:
    datetime.datetime.now().isoformat(timespec='milliseconds')
    def milliseconds_timestamp(d):
        return d.isoformat(timespec='milliseconds')

except TypeError:
    def milliseconds_timestamp(d):
        z = d.strftime('%z')
        z = z[:3] + ':' + z[3:]
        return d.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + z

Учитывая последнее определение в Python3,6

>>> milliseconds_timestamp(d) == d.isoformat(timespec='milliseconds')
True

с

>>> milliseconds_timestamp(d)
'2018-10-09T08:19:16.999+02:00'
...