Существует ли директива формата подстановочного знака для strptime? - PullRequest
4 голосов
/ 01 апреля 2012

Я использую strptime следующим образом:

import time
time.strptime("+10:00","+%H:%M")

, но "+10: 00" также может быть "-10: 00" (смещение часового пояса от UTC), что приведет к нарушению вышеуказанной команды,Я мог бы использовать

time.strptime("+10:00"[1:],"%H:%M")

, но в идеале мне было бы удобнее использовать подстановочный знак перед кодом формата.

Существует ли такой подстановочный оператор для Python strptime /strftime

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Нет оператора подстановки. Список директив формата , поддерживаемый strptime, находится в документации.

Вам нужна директива формата %z, которая поддерживает представление часового пояса в форме +HHMM или -HHMM. Хотя это поддерживается datetime.strftime в течение некоторого времени, оно поддерживается только в strptime , начиная с Python 3.2 .

На Python 2 лучший способ справиться с этим - использовать datetime.datetime.strptime, вручную обработать отрицательное смещение и получить datetime.timedelta:

import datetime

tz = "+10:00"

def tz_to_timedelta(tz):
    min = datetime.datetime.strptime('', '')
    try:
        return -(datetime.datetime.strptime(tz,"-%H:%M") - min)
    except ValueError:
        return datetime.datetime.strptime(tz,"+%H:%M") - min

print tz_to_timedelta(tz)

В Python 3.2 удалите : и используйте %z:

import time
tz = "+10:00"
tz_toconvert = tz[:3] + tz[4:]
tz_struct_time = time.strptime(tz_toconvert, "%z")
0 голосов
/ 25 марта 2018

Мы разработали datetime-glob для анализа даты / времени из списка файлов, созданных с помощью согласованного форматирования даты / времени. Из документации модуля:

>>> import datetime_glob
>>> matcher = datetime_glob.Matcher(
                         pattern='/some/path/*%Y-%m-%dT%H-%M-%SZ.jpg')

>>> matcher.match(path='/some/path/some-text2016-07-03T21-22-23Z.jpg')
datetime_glob.Match(year = 2016, month = 7, day = 3, 
                    hour = 21, minute = 22, second = 23, microsecond = None)

>>> match.as_datetime()
datetime.datetime(2016, 7, 3, 21, 22, 23)
...