# NAME
POSIX::strftime::Compiler - Compile strftime to perl. for logger and servers
# SYNOPSIS
use POSIX::strftime::Compiler;
my $psc = POSIX::strftime::Compiler->new('%a, %d %b %Y %T %z');
say $psc->to_string(localtime):
# DESCRIPTION
POSIX::strftime::Compiler compiles strftime's format to perl. And generates formatted string.
Because this module compiles strftime to perl code, it has good performance.
POSIX::strftime::Compiler has compatibility with GNU's strftime, but only supports "C" locale.
It's useful for loggers and servers.
# METHDO
- new($fmt:String)
create instance of POSIX::strftime::Compiler.
- to\_string(@time)
generate formatted string.
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
$psc->to_string($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst):
# SUPPORTED FORMAT
- `%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 month name according to the current locale.
- `%c`
The preferred date and time representation for the current locale.
- `%C`
The century number (year/100) as a 2-digit integer. (SU)
- `%d`
The day of the month as a decimal number (range 01 to 31).
- `%D`
Equivalent to `%m/%d/%y`. (for Americans only: Americans should note that in
other countries `%d/%m/%y` is rather common. This means that in international
context this format is ambiguous and should not be used.) (SU)
- `%e`
Like `%d`, the day of the month as a decimal number, but a leading zero is
replaced by a space. (SU)
- `%E`
Modifier: use alternative format, see below. (SU)
- `%F`
Equivalent to `%Y-%m-%d` (the ISO 8601 date format). (C99)
- `%G`
The ISO 8601 week-based year with century as a decimal number. The
4-digit year corresponding to the ISO week number (see `%V`). This has the
same format and value as %Y, except that if the ISO week number belongs to the
previous or next year, that year is used instead. (TZ)
- `%g`
Like `%G`, but without century, that is, 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)
- `%N`
Nanoseconds (range 000000000 to 999999999). It is a non-POSIX extension and
outputs a nanoseconds if there is floating seconds argument.
- `%O`
Modifier: use alternative format, see below. (SU)
- `%p`
Either "AM" or "PM" according to the given time value, or the corresponding
strings for the current locale. Noon is treated as "PM" and midnight as "AM".
- `%P`
Like `%p` but in lowercase: "am" or "pm" or a corresponding string for the
current locale. (GNU)
- `%r`
The time in a.m. or p.m. notation. In the POSIX locale this is equivalent to
`%I:%M:%S %p`. (SU)
- `%R`
The time in 24-hour notation (%H:%M). (SU) For a version including the
seconds, see `%T` below.
- `%s`
The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). (TZ)
- `%S`
The second as a decimal number (range 00 to 60). (The range is up to 60 to
allow for occasional leap seconds.)
- `%t`
A tab character. (SU)
- `%T`
The time in 24-hour notation (`%H:%M:%S`). (SU)
- `%u`
The day of 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,
starting with the first Sunday as the first day of week 01. See also `%V` and
`%W`.
- `%V`
The ISO 8601 week number of the current year as a decimal number,
range 01 to 53, where week 1 is the first week that has at least 4 days in the
new year. See also `%U` and `%W`. (SU)
- `%w`
The day of 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,
starting with the first Monday as the first day of week 01.
- `%x`
The preferred date representation for the current locale without the time.
- `%X`
The preferred time representation for the current locale without the date.
- `%y`
The year as a decimal number without a century (range 00 to 99).
- `%Y`
The year as a decimal number including the century.
- `%z`
The `+hhmm` or `-hhmm` numeric timezone (that is, the hour and minute offset
from UTC). (SU)
- `%Z`
The timezone or name or abbreviation.
- `%%`
A literal `%` character.
`%E[cCxXyY]` and `%O[deHImMSuUVwWy]` are not supported, just remove E and O prefix.
# SEE ALSO
- [POSIX::strftime::GNU](
http://search.cpan.org/perldoc?POSIX::strftime::GNU)
POSIX::strftime::Compiler is built on POSIX::strftime::GNU::PP code
- [POSIX](
http://search.cpan.org/perldoc?POSIX)
- [Apache::LogFormat::Compiler](
http://search.cpan.org/perldoc?Apache::LogFormat::Compiler)
# LICENSE
Copyright (C) Masahiro Nagano.
Format specification is based on strftime(3) manual page which is a part of the Linux man-pages project.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
# AUTHOR
Masahiro Nagano <
[email protected]>