- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何在 ISO 8601:2004 中替换 __TIMESTAMP__
?
__TIMESTAMP__
Sat Jul 6 02:50:06 2013
对比
__TIMESTAMP_ISO__
2013-07-06T00:50:06Z
最佳答案
噢,乐观主义者!您不会真的期望一个标准会关注另一个标准,对吗?如您所知,__TIMESTAMP__
定义不在标准 C 中。拥有像您建议的 __TIMESTAMP_ISO__
格式会很棒(您总是想要祖鲁时间,还是让本地时区偏移更好?),但坦率地说,最简单的方法它添加的可能是 GCC 和 Clang 等的补丁。
您可以按照 user1034749 的建议尝试使用 asctime()
进行修改的 answer ,但我不想那样做。
在 GCC 4.8.1 中 manual ,有一个有趣的警告抑制:
-Wno-builtin-macro-redefined
Do not warn if certain built-in macros are redefined. This suppresses warnings for redefinition of__TIMESTAMP__
,__TIME__
,__DATE__
,__FILE__
, and__BASE_FILE__
.
这表明您可以尝试:
gcc ... -Wno-builtin-macro-redefined -D__TIMESTAMP__=$(date +'"%Y-%m-%dT%H:%M:%S"') ...
(请注意从 date
中获取字符串所必需的象形文字,并用双引号括起来。)但是,某些早期版本的 GCC 不支持该选项;我不记得以前见过它。您仍然可以重新定义 __TIMESTAMP__
:
$ gcc -std=c99 -Wall -Wextra -O xx.c -o xx
$ ./xx
Fri Jul 5 19:56:25 2013
$ gcc -std=c99 -Wall -Wextra -D__TIMESTAMP__=$(date +'"%Y-%m-%dT%H:%M:%S"') -O xx.c -o xx
<command-line>: warning: "__TIMESTAMP__" redefined
$ ./xx
2013-07-05T20:10:28
$
不是很漂亮,但它可以工作......哦,只是为了记录,源代码是(微不足道的):
#include <stdio.h>
int main(void)
{
printf("%s\n", __TIMESTAMP__);
return 0;
}
关于ISO 8601 :2004 中的 C 预处理器 __TIMESTAMP__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498556/
你好, 我目前正在开发一个项目,它有自己的日志系统,多年前编写的,它使用 __TIMESTAMP__ 来打印当前日期和时间。我注意到,有时这个宏会卡住,并一遍又一遍地返回相同的值。例如,现在是 12:
我有以下小程序: #include int main() { std::cout << "Time: " << __TIME__ << std::endl; std::cout << "
我正在使用基于 eclipse 和 GCC 的 IDE 的现有示例来为嵌入式 EFTPOS 设备编译我的应用程序。但在下面几行: fprintf(stdout, "** Compilation dat
如何在 ISO 8601:2004 中替换 __TIMESTAMP__? __TIMESTAMP__ Sat Jul 6 02:50:06 2013 对比 __TIMESTAMP_ISO__ 201
我是一名优秀的程序员,十分优秀!