1

以前我有一个关于__DATE__

我想用来__DATE__获取构建时间。该产品将在具有不同语言环境的系统上编译。格式__DATE__总是一样的吗?我的目标是从中获取构建时间,__DATE__并且我想确保它可以在任何系统上运行。目前我使用:

QDateTime(QLocale("en_US").toDate(QString(__DATE__).simplified(), "MMM d yyyy")).toMSecsSinceEpoch();

获取构建时间的日期时间。但是是否有可能在这种情况下不起作用,例如是否有可能__DATE__不返回Jul 14 2020但以本地格式(例如中文)返回?如果是最后一种情况,那么 todate 方法将无法正常工作吗?

4

1 回答 1

3

来自 C++ 标准(草案):

__DATE__

源文件的翻译日期:格式为 的字符串文字,其中月份的名称与函数 "Mmm dd yyyy"生成的月份名称相同,如果值小于 10,则第一个字符为空格字符。如果翻译日期不可用,则应提供实现定义的有效日期。asctimedd

http://eel.is/c++draft/cpp#predefined-1.2

如果日期不可用,最后一句为编译器提供了一些自由度。海合会这样做:

如果 GCC 无法确定当前日期,它将发出警告消息(每次编译一次)并__DATE__扩展为"??? ?? ????".

https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html

总而言之 - 格式是固定的,并且总是"Mmm dd yyy"使用英文名称。

于 2020-07-15T10:59:24.400 回答