从 Windows 上当前系统格式的字符串中解析日期和时间
我需要解析一个字符串,该字符串应该由系统当前日期/时间格式设置中的日期和时间组成。例如,我可以使用 std::get_time()
,但问题是我不知道系统中设置的日期/时间格式是什么。 我找到了几种获取日期/时间格式的方法:使用
GetLocaleInfo
/GetLocaleInfoEx
和 LOCALE_SSHORTDATE
和 LOCALE_SSHORTDATE
但通过这种方式,我得到了与解析日期/时间的函数“不兼容的格式”(std: :get_time()
) 并且需要转换:
GetLocaleInfo()
给我 "MM/dd/yyyy H:mm:ss"
,这个需要转换为类似 "%m/%d/%Y %H:%M:%S"
的内容。
std::time_get
给出了日期格式中更准确的顺序:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
std :: get_time
使用std :: time_get
facet。std :: time_get
使用posixstrptime
其标志的接口。posix
strptime
规格指出:%x
日期,使用该语言环境的日期格式格式。%x
使用该语言环境的时间格式。这是否真的在您的环境中起作用是另一回事。但是,值得尝试一下。
std::get_time
uses thestd::time_get
facet.std::time_get
uses the POSIXstrptime
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.