| // Command line utility to output the date under control of a format string |
| |
| // Copyright 2008 Beman Dawes |
| |
| // Distributed under the Boost Software License, Version 1.0. |
| // See http://www.boost.org/LICENSE_1_0.txt |
| |
| #define _CRT_SECURE_NO_WARNINGS |
| |
| #include <ctime> |
| #include <string> |
| #include <iostream> |
| #include <cstdlib> |
| |
| using namespace std; |
| |
| int main(int argc, char * argv[]) |
| { |
| if (argc != 2 ) |
| { |
| cerr << |
| "Invoke: strftime format\n" |
| "Example: strftime \"The date is %Y-%m-%d in ISO format\"" |
| "The format codes are:\n" |
| " %a Abbreviated weekday name\n" |
| " %A Full weekday name\n" |
| " %b Abbreviated month name\n" |
| " %B Full month name\n" |
| " %c Date and time representation appropriate for locale\n" |
| " %d Day of month as decimal number (01 - 31)\n" |
| " %H Hour in 24-hour format (00 - 23)\n" |
| " %I Hour in 12-hour format (01 - 12)\n" |
| " %j Day of year as decimal number (001 - 366)\n" |
| " %m Month as decimal number (01 - 12)\n" |
| " %M Minute as decimal number (00 - 59)\n" |
| " %p Current locale's A.M./P.M. indicator for 12-hour clock\n" |
| " %S Second as decimal number (00 - 59)\n" |
| " %U Week of year as decimal number, with Sunday as first day of week (00 - 53)\n" |
| " %w Weekday as decimal number (0 - 6; Sunday is 0)\n" |
| " %W Week of year as decimal number, with Monday as first day of week (00 - 53)\n" |
| " %x Date representation for current locale\n" |
| " %X Time representation for current locale\n" |
| " %y Year without century, as decimal number (00 - 99)\n" |
| " %Y Year with century, as decimal number\n" |
| " %z, %Z Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown\n" |
| " %% Percent sign\n" |
| ; |
| return 1; |
| } |
| |
| string format = argv[1]; |
| time_t t = time(0); |
| tm * tod = localtime(&t); |
| if (!tod) |
| { |
| cerr << "error: localtime function failed\n"; |
| return 1; |
| } |
| char* s = new char [format.size() + 256]; |
| if (strftime( s, format.size() + 256, format.c_str(), tod ) == 0 ) |
| { |
| cerr << "error: buffer overflow\n"; |
| return 1; |
| } |
| |
| cout << s; |
| return 0; |
| } |