我正在获取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
答案 0 :(得分:7)
使用time.h中的函数strftime
strftime(array[index]->mtime, 20, "%d-%b-%Y %H:%M", pmytm);
答案 1 :(得分:0)
如果您想要更多时间格式控制,请尝试使用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: %s\n", time_buf);
}
如果您不想要时区校正,可以使用gmtime()而不是localtime()。
这个输出是:
Time: 08-30-2010 17-13 (mon=Aug)