从 Windows 上当前系统格式的字符串中解析日期和时间

发布于 2025-01-19 17:01:12 字数 1054 浏览 0 评论 0原文

我需要解析一个字符串,该字符串应该由系统当前日期/时间格式设置中的日期和时间组成。例如,我可以使用 std::get_time(),但问题是我不知道系统中设置的日期/时间格式是什么。 我找到了几种获取日期/时间格式的方法:使用

GetLocaleInfo/GetLocaleInfoExLOCALE_SSHORTDATELOCALE_SSHORTDATE

std::time_get::dateorder()

但通过这种方式,我得到了与解析日期/时间的函数“不兼容的格式”(std: :get_time()) 并且需要转换:

GetLocaleInfo() 给我 "MM/dd/yyyy H:mm:ss",这个需要转换为类似 "%m/%d/%Y %H:%M:%S" 的内容。

std::time_get::dateorder() 给出了日期格式中更准确的顺序:

std::time_get<char>::dmy
std::time_get<char>::mdy
std::time_get<char>::ymd
std::time_get<char>::ydm

但仍然需要定义分隔符和时间格式。

一般来说,我不介意手动转换,但我想知道是否有更直接的方法可以提供与日期/时间解析函数兼容的系统日期/时间格式。

I need to parse a string that is supposed to consist of a date and time in the system's current date/time format settings. I can use, for example, std::get_time(), but the problem is that I don't know what date/time format is set in the system.
I have found several ways to get the date/time format using:

GetLocaleInfo/GetLocaleInfoEx with LOCALE_SSHORTDATE and LOCALE_SSHORTDATE

or std::time_get<char>::dateorder()

but in this way, I get "incompatible format" with functions that parse date/time (std::get_time()) and it needs to be converted:

GetLocaleInfo() gives me "MM/dd/yyyy H:mm:ss", and this needs to be converted to something like "%m/%d/%Y %H:%M:%S".

std::time_get<char>::dateorder() gives a more accurate order in date format:

std::time_get<char>::dmy
std::time_get<char>::mdy
std::time_get<char>::ymd
std::time_get<char>::ydm

but it is still necessary to define the separator and the time format.

In general, I don't mind manual conversion, but I'm wondering if there is a more direct way that gives the system date/time format that is compatible with the date/time parsing functions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅忆流年 2025-01-26 17:01:12

std :: get_time使用std :: time_get facet。

std :: time_get使用posix strptime其标志的接口。

posix strptime规格指出:

  • %x日期,使用该语言环境的日期格式格式。
  • %x使用该语言环境的时间格式。

这是否真的在您的环境中起作用是另一回事。但是,值得尝试一下。

std::get_time uses the std::time_get facet.

std::time_get uses the POSIX strptime interface for its flags.

The POSIX strptime specification states that:

  • %x The date, using the locale's date format.
  • %X The time, using the locale's time format.

Whether or not this will actually work in your environment is another matter. However, it is worth giving this a try.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文