C++ 获取构建时 QDateTime 的可靠方法
C++ reliable way to get QDateTime for buildtime
关于 __DATE__
我想使用 __DATE__
获取构建时间。
该产品将在具有不同语言环境的系统上编译。
__DATE__
的格式是否始终相同?
我的目标是从 __DATE__
获取构建时间,我想确保它在任何系统上都能正常工作。
目前我使用:
QDateTime(QLocale("en_US").toDate(QString(__DATE__).simplified(), "MMM d yyyy")).toMSecsSinceEpoch();
获取构建时间的日期时间。
但是在某些情况下这是否可行,例如有没有可能 __DATE__
不是 return Jul 14 2020
而是本地格式,例如中国人?
如果是最后一种情况,todate 方法将无法正常工作吗?
来自 C++ 标准(草案):
__DATE__
The date of translation of the source file: a character string literal
of the form "Mmm dd yyyy"
, where the names of the months are the same
as those generated by the asctime
function, and the first character of
dd
is a space character if the value is less than 10. If the date of
translation is not available, an implementation-defined valid date
shall be supplied.
http://eel.is/c++draft/cpp#predefined-1.2
如果日期不可用,最后一句话为编译器提供了一些自由。 GCC 这样做:
If GCC cannot determine the current date, it will emit a warning
message (once per compilation) and __DATE__
will expand to "??? ?? ????"
.
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
总而言之 - 格式是固定的,并且始终是 "Mmm dd yyy"
,使用英文名称。
__DATE__
我想使用 __DATE__
获取构建时间。
该产品将在具有不同语言环境的系统上编译。
__DATE__
的格式是否始终相同?
我的目标是从 __DATE__
获取构建时间,我想确保它在任何系统上都能正常工作。
目前我使用:
QDateTime(QLocale("en_US").toDate(QString(__DATE__).simplified(), "MMM d yyyy")).toMSecsSinceEpoch();
获取构建时间的日期时间。
但是在某些情况下这是否可行,例如有没有可能 __DATE__
不是 return Jul 14 2020
而是本地格式,例如中国人?
如果是最后一种情况,todate 方法将无法正常工作吗?
来自 C++ 标准(草案):
__DATE__
The date of translation of the source file: a character string literal of the form
"Mmm dd yyyy"
, where the names of the months are the same as those generated by theasctime
function, and the first character ofdd
is a space character if the value is less than 10. If the date of translation is not available, an implementation-defined valid date shall be supplied.
http://eel.is/c++draft/cpp#predefined-1.2
如果日期不可用,最后一句话为编译器提供了一些自由。 GCC 这样做:
If GCC cannot determine the current date, it will emit a warning message (once per compilation) and
__DATE__
will expand to"??? ?? ????"
.
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
总而言之 - 格式是固定的,并且始终是 "Mmm dd yyy"
,使用英文名称。