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",使用英文名称。