#include #include #include #include #include #define DAY(n) (n == 0) ? "Sun" :\ (n == 1) ? "Mon" :\ (n == 2) ? "Tue" :\ (n == 3) ? "Wed" :\ (n == 4) ? "Thu" :\ (n == 5) ? "Fri" :\ (n == 6) ? "Sat" : "None" #define MON(n) (n == 0) ? "Jan" :\ (n == 1) ? "Feb" :\ (n == 2) ? "Mar" :\ (n == 3) ? "Apr" :\ (n == 4) ? "May" :\ (n == 5) ? "Jun" :\ (n == 6) ? "Jul" :\ (n == 7) ? "Aug" :\ (n == 8) ? "Sep" :\ (n == 9) ? "Oct" :\ (n ==10) ? "Nov" :\ (n ==11) ? "Dec" : "None" char *timef(char *, time_t); int main(int argc, char *argv[]) { printf("%s\n", timef("%w %m %d %H:%M:%S %y", time(0))); printf("%s\n", timef("%T (%t %p (%P)), %D", time(0))); printf("%s\n", timef("%t (use arg)", (argc < 2) ? time(0) : atoi(argv[1]))); printf("%s\n", timef("day: %d\nmon: %m\nweek: %w\nyear: %y", time(0))); return 0; } char *timef(char *format, time_t sse) { int i, t; char *buffer = malloc(strlen(format)+100); struct tm *time_s; memset(buffer, 0, strlen(buffer)); time_s = localtime(&sse); for (i=0; itm_hour); break; case 'M': sprintf(buffer, "%s%2.2d", buffer, time_s->tm_min); break; case 'S': sprintf(buffer, "%s%2.2d", buffer, time_s->tm_sec); break; case 'y': sprintf(buffer, "%s%d", buffer, time_s->tm_year+1900); break; case 'w': sprintf(buffer, "%s%s", buffer, DAY(time_s->tm_wday)); break; case 'm': sprintf(buffer, "%s%s", buffer, MON(time_s->tm_mon)); break; case 'd': sprintf(buffer, "%s%d", buffer, time_s->tm_mday); break; case 'D': sprintf(buffer, "%s%d/%d/%d", buffer, time_s->tm_mday, time_s->tm_mon+1, time_s->tm_year+1900); break; case 'T': sprintf(buffer, "%s%2.2d:%2.2d:%2.2d", buffer, time_s->tm_hour, time_s->tm_min, time_s->tm_sec); break; case 't': sprintf(buffer, "%s%d:%2.2d", buffer, (time_s->tm_hour <= 12) ? time_s->tm_hour : time_s->tm_hour-12, time_s->tm_min); break; case 'p': sprintf(buffer, "%s%s", buffer, (time_s->tm_hour <= 12) ? "am" : "pm"); break; case 'P': sprintf(buffer, "%s%s", buffer, (time_s->tm_hour <= 12) ? "AM" : "PM"); break; case '%': sprintf(buffer, "%s%%", buffer); break; } i++; } sprintf(buffer, "%s%c", buffer, format[i]); } return buffer; }