mac os下编译linux项目程序时发现的clang兼容性问题

9527 2014-01-13 04:22:57

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, const char *argv[])
{
char szDateNow[20];
struct tm curtime;
time_t t = time( NULL ); //get systime
localtime_r( &t, &curtime); //转换时间格式

strftime( szDateNow, sizeof(szDateNow), "%Y-%m", &curtime);
printf("%%Y-%%m is %s.\n", szDateNow);
strftime( szDateNow, sizeof(szDateNow), "%04Y-%02m", &curtime);
printf("%%04Y-%%02m is %s.\n", szDateNow);
exit(0);
}

如上所示代码,在linux下使用gcc编译,输出结果为:
%Y-%m is 2014-01.
%04Y-%02m is 2014-01.
在mac os 10.9.1下使用clang编译,输出结果为:
%Y-%m is 2014-01.
%04Y-%02m is 4Y-2m.

请问大家一个问题,如果我要输出02Y-02m即两位年两位月改怎么做,输出四位自己截取这个不要提了
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
9527 2014-03-11
  • 打赏
  • 举报
回复
引用 4 楼 Bokutake 的回复:
其实你都有了tm结构了,可以直接把里面的各个字段取出来用sprintf处理啊,它肯定是支持有字段宽度的格式串的。
也是,呵呵,过于执拗了,多谢Bokutake
辰岡墨竹 2014-03-11
  • 打赏
  • 举报
回复
其实你都有了tm结构了,可以直接把里面的各个字段取出来用sprintf处理啊,它肯定是支持有字段宽度的格式串的。
9527 2014-03-10
  • 打赏
  • 举报
回复
引用 2 楼 Bokutake 的回复:
这个字段宽度的设置是一个GNU扩展,不过我看了苹果的strftime的代码,似乎已经加上了这个GNU扩展的支持。不过其实你加不加都一样。因为%Y就是4位的,%m也是补0的2位
我用xcode 5.0.2,输出结果如下,还是没有支持的: %Y-%m is 2014-03. %04Y-%02m is 4Y-2m. Program ended with exit code: 0 我也是在用xcode编译原来的linux项目发现这个问题,%m问题不大,就是原来代码中用到了两位的年%02Y,这个不好处理。xcode的Analyze相当不错,开发linux很合适 多谢Bokutake参与
辰岡墨竹 2014-03-10
  • 打赏
  • 举报
回复
这个字段宽度的设置是一个GNU扩展,不过我看了苹果的strftime的代码,似乎已经加上了这个GNU扩展的支持。不过其实你加不加都一样。因为%Y就是4位的,%m也是补0的2位
9527 2014-03-10
  • 打赏
  • 举报
回复
结贴倒计时中,有人来接分没有。。。

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧