c/c++语言开发共享如何从struct tm中创建一个人类可读的字符串?

我得到一个struct tm,我想将它转换为具有此特定输出的字符串:

dd-mm-yyyy hh:mm

除了月份(mm)之外,一切都是数字,例如:

2010年10月14日10:35

这是我目前的代码:

struct stat sb; if (lstat(path, &sb) == 0) { struct tm *pmytm = gmtime(&sb.st_mtime); sprintf(array[index]->mtime, "%d-%d-%d %d:%d", pmytm->tm_mday, pmytm->tm_mon, 1900 + pmytm->tm_year, pmytm->tm_hour, pmytm->tm_min); 

问题是我不知道如何有效地将这个pmytm-> tm_mon转移到月份。 你是否建议我构建一个月的数组并且只是索引到该数组(用我的sprintf中的%s替换%d),或者是否有更好的解决方案?

另外,我有一个小时和分钟的问题。 如果它低于10(2个数字),它将只显示一个数字,如:10:8而不是10:08。 我怎么能解决这个问题?

非常感谢您的帮助,

编辑:作为一个解决方案我想到的是什么(优雅?):

  static char *months[] = { "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; struct stat sb; if (lstat(path, &sb) == 0) { struct tm *pmytm = gmtime(&sb.st_mtime); sprintf(array[index]->mtime, "%02d-%s-%d %02d:%02d", pmytm->tm_mday, months[pmytm->tm_mon], 1900 + pmytm->tm_year, pmytm->tm_hour, pmytm->tm_min); 

Jary

    使用time.h中的strftime函数

     strftime(array[index]->mtime, 20, "%d-%b-%Y %H:%M", pmytm); 

    如果你想要更多时间格式控制尝试使用strfime:

     struct stat sb; if (lstat("/etc/passwd", &sb) == 0) { char time_buf[256]; (void) strftime(time_buf, sizeof (time_buf), "%m-%d-%Y %H-%M (mon=%b)", localtime(&sb.st_mtime)); (void) printf("Time: %sn", time_buf); } 

    如果不需要时区校正,可以使用gmtime()而不是localtime()。

    这个输出是:

     Time: 08-30-2010 17-13 (mon=Aug) 

      以上就是c/c++开发分享如何从struct tm中创建一个人类可读的字符串?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549669.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐