I use this command-line UNIX utility for generating filenames when I know that a, sayyy, audio stream was generated in the previous week, but I only know the day …
Usage: `datep sun`
prints: 20061015 which in this case is a couple days previous to the current day. Perfect for when you want a filename friendly date from yesterday or before.
This may be backticked into any other command for generating filenames, etc. Use at your own-risk. Use ‘View source’ in your browser to get the source.
#include <stdio.h>
#include <string.h>
#include <time.h>
int main (int argc, const char * argv[]) {
# ifdef _DEBUG
// Print args 0 - command, 1 - 3 letter day
int i = 0;
for( i=0 ; i<argc ; ++i ) {
printf( "arg( %d ) = %s\n", i, argv[i] );
}
# endif
// Usage
// Too few args
if( argc < 2 ) {
printf( "Error: Too few arguments.\nUsage: datep mon|tue|wed|...|sun [\"+format\"]\nSee date for description of format." );
return -1;
}
// Check that we got at least 3 chars for day compare
if( 3 != strlen( argv[1] ) ) {
printf( "Please specify a valid day.\nUsage: datep mon|tue|wed|...|sun [\"+format\"]\nSee date for description of format.\n" );
return -1;
}
// Check a valid day was passed
int valid = 0;
if( !strncasecmp( "sun", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "mon", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "tue", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "wed", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "thu", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "fri", argv[1], 3 ) ) valid = 1;
if( !strncasecmp( "sat", argv[1], 3 ) ) valid = 1;
// If not valid ...
if( !valid ) {
printf( "Please specify a valid day.\nUsage: datep mon|tue|wed|...|sun [\"+format\"]\nSee date for description of format.\n" );
return -1;
}
// Get todays date
time_t cur_time = time(NULL);
struct tm *loc_time;
char buffer[255];
strncpy( buffer, "xxx", 4 );
// ### always skip back by at least one day
// Skip back by at least 1 day until we find the day the user specified
while( strncasecmp( argv[1], buffer, 3 )!=0 ) {
// skip back a day
cur_time = cur_time - 1*24*60*60; // one days worth of seconds
// Format TLA for day into buffer
loc_time = localtime( &cur_time );
strftime( buffer, 4, "%a", loc_time );
}
// Print day in standard [20061017] or passed format
// ### implement using passed format
strftime( buffer, 255, "%Y%m%d", loc_time );
printf( "%s", buffer );
return 0;
}