#python-3.x #datetime #format
#python-3.x #datetime #формат
Вопрос:
Как я могу отформатировать текущее время в Python в локализованном (соответствующем региону) формате даты и времени без секунд?
Например, приведенный ниже вывод должен иметь значение :41
в выходных данных, но он должен сохранять все другие региональные функции, такие как: порядок дня и месяца, сокращение месяца, формат 12 часов или 24 часа, индикатор утра или вечера и т. Д.
(Обратите внимание, что я явно установил разные локали ниже только для целей тестирования, но я буду полагаться на систему, установленную локально).
import time
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
time.strftime('%x %X')
'12/11/2020 07:35:41 PM'
time.strftime('%c')
'Fri 11 Dec 2020 07:35:41 PM EST'
locale.setlocale(locale.LC_ALL, 'en_GB.UTF-8')
'en_GB.UTF-8'
time.strftime('%x %X')
'11/12/20 19:35:41'
time.strftime('%c')
'Fri 11 Dec 2020 19:35:41 EST'
locale.setlocale(locale.LC_ALL, 'en_CA.UTF-8')
'en_CA.UTF-8'
time.strftime('%x %X')
'2020-12-11 07:35:41 PM'
time.strftime('%c')
'Fri 11 Dec 2020 07:35:41 PM'
locale.setlocale(locale.LC_ALL, 'en_AU.UTF-8')
'en_AU.UTF-8'
time.strftime('%x %X')
'11/12/20 19:35:41'
time.strftime('%c')
'Fri 11 Dec 2020 19:35:41'
Комментарии:
1. Почему бы не использовать другие директивы strptime? Например. тот, который имеет
%H:%M
и нет%S
?2. Я хочу начать с текущего объекта time и преобразовать его в удобочитаемую строку, соответствующую региональным соглашениям (содержащую день, месяц, год, час, минуту, возможно, TZ). strptime ожидает строку в качестве входных данных, но у меня есть объект time. Некоторые культуры показывают день перед месяцем; другие показывают формат 24 часа против 12 часов. Мне нужно было бы проверить каждую локаль, решить, какой формат времени они используют, а затем создать строку пользовательского формата, содержащую различные директивы (например, «%I» или «%H» для часа и добавление «% p» для AM / PM). Должен быть более простой способ, вместо того, чтобы кодировать всю эту сложную логику?
3. Хорошо, я понял вашу точку зрения 😉 Поскольку есть %c, %x и %X, это уже было закодировано, повторять, конечно, не нужно. Но настройка этого (без секунд), похоже, противоречит идее предопределенного формата, верно? В любом случае, прямо сейчас я не могу придумать простой способ, кроме последующей обработки строки.