1

「日月日年」形式で時間を取得するために、次のことを行っています。

struct tm *example= localtime(&t);
strftime(buf,sizeof(buf),"%a %b %d %Y",example);
strncpy(time_buffer,buffer,sizeof(time_buffer))   ;

しかし、日付が 9 などの 1 桁の場合、9 と表示されます。09 として印刷したいのですが、どうすればよいでしょうか?

4

1 に答える 1

1

strftimeのマンページには次のように書かれています。

%d     The day of the month as a decimal number (range 01 to 31).

それはあなたが望むもののようです。

// compile with: gcc -o ex1 -Wall ex1.c
#include "stdio.h"
#include "sys/time.h"
#include "time.h"

int main (const int argc, const char ** argv ) {
  time_t curr_time;
  char buff[1024];
  // time(&curr_time);
  curr_time = 1359684105; // Thu Jan 31 2013
  struct tm *now = localtime(&curr_time);
  strftime(buff, sizeof(buff),  "%a %b %d %Y", now);
  printf("time: %ld\n", curr_time);
  printf("time: %s\n", buff);

  curr_time += 24 * 60 * 60; // Fri Feb 01 2013
  now = localtime(&curr_time);
  strftime(buff, sizeof(buff),  "%a %b %d %Y", now);
  printf("time: %ld\n", curr_time);
  printf("time: %s\n", buff);
  return 0;
}

それは以下を生み出します:

time: 1359684105
time: Thu Jan 31 2013
time: 1359770505
time: Fri Feb 01 2013

それはあなたが求めているもののように見えます。先行ゼロを削除する場合は、%eを使用できます。

   %e     Like %d, the day of the month as a decimal number, but a leading zero is replaced by a space. (SU)

著者は、%dがsolarisのマンページに準拠していないと報告しました。これは、sprintfを直接使用する代替ソリューションです。

// compile with: gcc -o ex1 -Wall ex1.c
#include "stdio.h"
#include "sys/time.h"
#include "time.h"

int main (const int argc, const char ** argv ) {
  time_t curr_time;
  char buff[1024], daynamebuff[8], monbuff[8], daynumbuff[3], yearbuff[8];

  // time(&curr_time);
  curr_time = 1359684105; // Thu Jan 31 2013
  curr_time += 24 * 60 * 60; // Fri Feb 01 2013
  struct tm *now = localtime(&curr_time);

  strftime(daynamebuff, sizeof(daynamebuff), "%a", now);
  strftime(monbuff,     sizeof(monbuff), "%b", now);
  strftime(daynumbuff,  sizeof(daynumbuff), "%e", now);
  strftime(yearbuff,    sizeof(yearbuff), "%Y", now);

  sprintf(buff, "%s %s %02d %s", daynamebuff, monbuff, now->tm_mday, yearbuff);
  printf("%s\n", buff);
  return 0;
}
于 2013-02-01T02:04:39.767 に答える