use POSIX qw(strftime); use Text::Wrap; %fmt = ( '' => '', '%%' => q"A literal `%' character.", '%+' => 'The date and time in date(1) format. (TZ)', '%a' => 'The abbreviated weekday name according to the current locale.', '%A' => 'The full weekday name according to the current locale.', '%b' => 'The abbreviated month name according to the current locale.', '%B' => 'The full monthname according to the current locale.', '%C' => 'The century number (year/100) as a 2-digit integer. (SU)', '%c' => 'The preferred date and time representation for the current locale.', '%d' => 'The day of the month as a decimal number (range 01 to 31).', '%D' => 'Equivalent to %m/%d/%y. (Yecch - for Americans only. Americans should note t' . 'hat in other countries %d/%m/%y is rather common. This means that in interna' . 'tional context this format is ambiguous and should not be used.) (SU)', '%F' => 'Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)', '%G' => 'The ISO 8601 year with century as a decimal number. The 4-digit year corresp' . 'onding to the ISO week number (see %V). This has the same format and value a' . 's %y, except that if the ISO week number belongs to the previous or next yea' . 'r, that year is used instead. (TZ)', '%g' => 'Like %G, but without century, i.e., with a 2-digit year (00-99). (TZ)', '%h' => 'Equivalent to %b. (SU)', '%H' => 'The hour as a decimal number using a 24-hour clock (range 00 to 23).', '%I' => 'The hour as a decimal number using a 12-hour clock (range 01 to 12).', '%j' => 'The day of the year as a decimal number (range 001 to 366).', '%k' => 'The hour (24-hour clock) as a decimal number (range 0 to 23); single digits ' . 'are preceded by a blank. (See also %H.) (TZ)', '%l' => 'The hour (12-hour clock) as a decimal number (range 1 to 12); single digits ' . 'are preceded by a blank. (See also %I.) (TZ)', '%m' => 'The month as a decimal number (range 01 to 12).', '%M' => 'The minute as a decimal number (range 00 to 59).', '%n' => 'A newline character. (SU)', '%p' => q"Either `AM' or `PM' according to the given time value, or the corresponding " . q"strings for the current locale. Noon is treated as `pm'and midnight as `am'.", '%P' => q"Like %p but in lowercase: `am' or `pm' or a corresponding string for the cur" . q"rent locale. (GNU)", '%r' => q"The time in a.m. or p.m. notation. In the POSIX locale this is equivalent to" . q" `%I:%M:%S %p'. (SU)", '%R' => 'The time in 24-hour notation (%H:%M). (SU) For a version including the secon' . 'ds, see %T below.', '%S' => 'The second as a decimal number (range 00 to 61).', '%s' => 'The number of seconds since the Epoch, i.e., since 1970-01-01 00:00:00 UTC. ' . '(TZ)', '%T' => 'The time in 24-hour notation (%H:%M:%S). (SU)', '%t' => 'A tab character. (SU)', '%u' => 'The dayof the week as a decimal, range 1 to 7, Monday being 1. See also %w. ' . '(SU)', '%U' => 'The week number of the current year as a decimal number, range 00 to 53, sta' . 'rting with the first Sunday as the first day of week 01. See also %V and %W.', '%V' => 'The ISO8601:1988 week number of the current year as a decimal number, range ' . '01 to 53, where week1 is the first week that has at least 4 days in the curr' . 'ent year, and with Monday as the first day of the week. See also %U and %W. ' . '(SU)', '%w' => 'The dayof the week as a decimal, range 0 to 6, Sunday being 0. See also %u.', '%W' => 'The week number of the current year as a decimal number, range 00 to 53, sta' . 'rting with the first Monday as the first day of week 01.', '%X' => 'The preferred time representation for the current locale without the date.', '%x' => 'The preferred date representation for the current locale without the time.', '%Y' => 'The year as a decimal number including the century.', '%y' => 'The year as a decimal number without a century (range 00 to 99).', '%Z' => 'The time zone or name or abbreviation.', '%z' => 'The time-zone as hour offset from GMT. Required to emit RFC822-conformant da' . 'tes (using "%a, %d %b %Y %H:%M:%S %z"). (GNU)', ); print "\nGood on $^O\n----------------\n", @bad; foreach my $fmt ( sort { lc $a cmp lc $b } keys %fmt ) { my $result = strftime( $fmt, localtime $^T ); (my $ofmt=$fmt)=~s/^%(.+)$/\%\#$1/; my $result2 = strftime( $ofmt, localtime $^T ); my $str = join '', "$fmt '$result' ($ofmt '$result2')\n", wrap( "\t", "\t", $fmt{$fmt} ), "\n"; if ($result) { print $str; } else { push @bad, $fmt; } } print "\nBad on $^O\n----------------\n@bad\n";