#python #python-3.x #datetime
#python #python-3.x #дата и время
Вопрос:
На рисунке ниже показаны настройки Windows для форматов даты и времени. Я хочу использовать этот формат для отображения отформатированной строки даты и времени с помощью функции strftime()
. И он должен работать на python 3.4 и более поздних версиях без прав администратора ОС. Как я могу получить форматы даты и времени, которые были установлены в системе Windows в python3? Или есть какой-либо эквивалентный метод для получения форматированной строки даты и времени?
Я пытался использовать win32api.GetDateFormat
и win32api.GetTimeFormat
, но это работает плохо. Поведение этих двух методов отличается на python 3.4 и python 3.9. В python 3.9 приведенный ниже код работает, когда год> = 1970
>>> win32api.GetTimeFormat(0,0, datetime.datetime(1969,11,20,1,2,3))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
>>> win32api.GetTimeFormat(0,0, datetime.datetime(1970,11,20,1,2,3))
'5:02:03 PM'
В python 3.4 приведенный выше код вызовет ValueError
. Но это можно исправить, установив часовой пояс. И GetDateFormat
работает только тогда, когда год> 1600.
(Pdb) win32api.GetTimeFormat(0,0, datetime.datetime(1970,11,20,1,2,3))
*** ValueError: astimezone() cannot be applied to a naive datetime
(Pdb) win32api.GetDateFormat(0, 0,datetime.datetime(1601,10,10,1,2,3).replace(tzinfo=pytz.timezone('UTC')))
'10/10/1601'
(Pdb) win32api.GetTimeFormat(0, 0,datetime.datetime(1601,10,10,1,2,3).replace(tzinfo=pytz.timezone('UTC')))
'1:02:03 AM'
(Pdb) win32api.GetTimeFormat(0, 0,datetime.datetime(1600,10,10,1,2,3).replace(tzinfo=pytz.timezone('UTC')))
'1:02:03 AM'
(Pdb) win32api.GetDateFormat(0, 0,datetime.datetime(1600,10,10,1,2,3).replace(tzinfo=pytz.timezone('UTC')))
*** pywintypes.error: (87, 'GetDateFormat', 'The parameter is incorrect.')
(Pdb) win32api.GetDateFormat(0, 0,datetime.datetime(1601,10,10,1,2,3).replace(tzinfo=pytz.timezone('UTC')))
'10/10/1601'
Есть ли какой-либо способ, которым я могу легко сгенерировать форматированную строку даты и времени на основе настроек ОС в python 3.4 ?
Комментарии:
1. @MrFuppes Моя цель — получить форматированную строку a
datetime
, где формат должен основываться на настройках операционной системы. Я попробую по-вашему, но доступ к реестру слишком сложен. Есть ли простой способ?2. «Моя цель — получить форматированную строку » — это нечто отличное от директивы форматирования, что подразумевает ваш вопрос «Как я могу получить форматы даты и времени «. Итак, что вам нужно?
3. @MrFuppes, я не являюсь носителем английского языка. Так что мое выражение может быть неточным. Моя конечная цель — сгенерировать форматированную строку для объекта типа datetime. Но формат должен быть из настроек операционной системы. Когда пользователь скрипта python имеет разные настройки формата даты и времени в операционной системе, форматированная строка вывода должна быть другой. Способ реестра не должен работать, поскольку у пользователя может не быть прав администратора ОС.
4. @MrFuppes Я обновил заголовок и описание вопроса. Надеюсь, кто-нибудь сможет мне помочь.
5. хорошо, это проясняет ситуацию 🙂 Я не думаю, что вы хотите взломать реестр для этого. Хотя я считаю, что для этого не потребуется никаких повышенных прав, это определенно будет непросто.