Форматирование времени Python отличается в Windows

Я, вероятно, упускаю очевидную разницу в платформе, которую я должен учитывать, но я получаю это при попытке сделать формат времени (Python2.7)...

в среде Linux:

>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
'Tue, 29-May-2012 21:42:04 GMT'

в Windows:

>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Invalid format string

Кортежи, возвращаемые из time.gmtime(), кажутся одинаковыми, поэтому я не совсем уверен, что мне нужно изменить.


person silijon    schedule 29.05.2012    source источник
comment
просто чтобы убедиться, что вы используете одни и те же версии Python на обеих платформах?   -  person Levon    schedule 30.05.2012


Ответы (3)


В общем, вы обнаружите, что python time.strftime() поддерживает тот же набор спецификаторов формата, что и платформа (точнее, libc этой платформы), на которой он работает. Однако только часть из них является переносимой. Список см. на http://docs.python.org/library/time.html. . Чтобы процитировать документы:

Дополнительные директивы могут поддерживаться на определенных платформах, но только перечисленные здесь имеют значение, стандартизированное ANSI C.

В этом случае %T можно заменить на %H:%M:%S.

person FatalError    schedule 29.05.2012
comment
Вот список символов формата, поддерживаемых Windows strftime: msdn.microsoft .com/en-us/library/fe06s4ak.aspx - person Joakim; 27.06.2014
comment
Небольшой нюанс: Linux/Posix/Unix strftime, похоже, молча игнорирует [некоторое] недопустимое форматирование, что вызывает фатальное исключение Windows. - person MarkHu; 27.08.2019

Я не вижу директиву формата %T в документации Python - не должно быть доступно/реализовано для платформы Windows (я только что пробовал с Python v2.7.3 и 3.2.3)

person Levon    schedule 29.05.2012

Я обнаружил, что у меня возникла эта проблема, потому что MacOS поддерживает "%D", и мне пришлось заменить его на "%m/%d/%Y", чтобы сделать его кроссплатформенным. В целом, объединение «простых» строк формата, таких как %m, кажется более безопасным, чем использование «агрегированных» строк, таких как %T или %D.

person coyot    schedule 14.09.2016