在 Windows 中获取用户日期格式

Get user date format in Windows

我的问题和this one类似,但是我不想获取locale的日期格式,而是用户设置的日期格式。原因是我正在使用 pywin32 api 与 Outlook 通信,特别是按日期过滤邮件。我必须将日期传递给应用程序的格式是用户设置的格式,否则将无法正常工作。

因此代码如下所示:

inbox = outlook.Session.GetSharedDefaultFolder(user, 6)

mails = inbox.Items.Restrict(
            "[ReceivedTime] > '{}'".format(retrieve_from.strftime(local_date_fmt))
)

如果有人知道如何在不传递用户定义格式的日期的情况下执行此操作,那也可以解决我的问题。

编辑:

我这里指的是在区域设置中设置的短日期格式window:

所以在这种情况下,local_date_fmt 将设置为 %Y-%m-%d

您可以使用 [MS.Docs]: GetDateFormatW function,它被 win32api.GetDateFormat 包装。

示例:

>>> import time
>>> import win32api
>>> import pywintypes
>>>
>>> DATE_SHORTDATE = 0x00000001
>>> DATE_LONGDATE = 0x00000002
>>>
>>> cur_time = time.time()
>>> cur_time
1567692860.7315922
>>> time.ctime(cur_time)
'Thu Sep  5 17:14:20 2019'
>>>
>>> win32api.GetDateFormat(0, DATE_SHORTDATE, pywintypes.Time(cur_time))
'2019-09-05'
>>>
>>> win32api.GetDateFormat(0, DATE_LONGDATE, pywintypes.Time(cur_time))  # Bonus
'Thursday, 5 September, 2019'