Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- /*
- * Format characters:
- * %y: 2-digit year
- * %Y: 4-digit year
- * %M: Month name
- * %N: Month number
- * %D: Day of month
- * %d: Day of week name
- * %H: Hour in 24-hour mode
- * %h: Hour in 12-hour mode
- * %m: Minute
- * %s: Second
- * %P: AM or PM label
- * %Z: String representing time zone
- * %n: Newline
- * %%: % symbol
- */
- char *format_string = "%d %M %D, %Y %H:%m:%s %Z";
- char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- char *dow[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
- void usage( void );
- int main( int argc, char **argv ){
- time_t timestamp = time( NULL );
- struct tm *curtime = localtime( ×tamp );
- if( argv[1] ){
- if( argv[1][0] == '-' ){
- usage();
- exit( 0 );
- }
- format_string = argv[1];
- }
- int len = strlen( format_string );
- /* Scan format string: */
- for( int i = 0; i < len; i++ ){
- if( format_string[i] == '%' ){
- i++;
- switch( format_string[i] ){
- case 'Y' : printf( "%d", curtime->tm_year + 1900 ); break;
- case 'y' : printf( "%s%d", (curtime->tm_year % 100 < 10)?"0":"", curtime->tm_year % 100); break;
- case 'N' : printf( "%s%d", (curtime->tm_mon < 9)?"0":"", curtime->tm_mon + 1 ); break;
- case 'M' : printf( "%s", months[curtime->tm_mon] ); break;
- case 'D' : printf( "%s%d", (curtime->tm_mday < 10)?"0":"", curtime->tm_mday ); break;
- case 'd' : printf( "%s", dow[curtime->tm_wday] ); break;
- case 'H' : printf( "%s%d", (curtime->tm_hour < 10)?"0":"", curtime->tm_hour ); break;
- case 'h' : printf( "%2d", (curtime->tm_hour % 12)?(curtime->tm_hour % 12):12 ); break;
- case 'm' : printf( "%s%d", (curtime->tm_min < 10)?"0":"", curtime->tm_min ); break;
- case 's' : printf( "%s%d", (curtime->tm_sec < 10)?"0":"", curtime->tm_sec ); break;
- case 'P' : printf( "%cM", (curtime->tm_hour < 12)?'A':'P' ); break;
- case 'Z' : printf( "%s", curtime->__TM_ZONE ); break;
- case 'n' : putchar( '\n' ); break;
- default : putchar( format_string[i] );
- }
- }
- else putchar( format_string[i] );
- }
- putchar( '\n' );
- return 0;
- }
- void usage(){
- putchar( '\n' );
- puts( "Usage: date [format_string]" );
- putchar( '\n' );
- puts( "Metacharacters for format string:" );
- puts( "\t\%y: 2-digit year" );
- puts( "\t\%Y: 4-digit year" );
- puts( "\t\%M: Month name" );
- puts( "\t\%N: Month number" );
- puts( "\t\%D: Day of month" );
- puts( "\t\%d: Day of week name" );
- puts( "\t\%H: Hour in 24-hour mode" );
- puts( "\t\%h: Hour in 12-hour mode" );
- puts( "\t\%m: Minute" );
- puts( "\t\%s: Second" );
- puts( "\t\%P: AM or PM label" );
- puts( "\t\%Z: String representing time zone" );
- puts( "\t\%n: Newline" );
- puts( "\t\%\%: \% symbol" );
- putchar( '\n' );
- puts( "Default format string:" );
- printf( "\"%s\"\n\n", format_string );
- }
Add Comment
Please, Sign In to add comment