+sub RFC2822 {
+ my $self = shift;
+ my %args = ( Date => 1,
+ Time => 1,
+ Timezone => '',
+ DayOfWeek => 1,
+ Seconds => 1,
+ @_,
+ );
+
+ # 0 1 2 3 4 5 6 7 8 9
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime($args{'Timezone'});
+
+ my ($date, $time) = ('','');
+ $date .= "$DAYS_OF_WEEK[$wday], " if $args{'DayOfWeek'} && $args{'Date'};
+ $date .= "$mday $MONTHS[$mon] $year" if $args{'Date'};
+
+ if ( $args{'Time'} ) {
+ $time .= sprintf("%02d:%02d", $hour, $min);
+ $time .= sprintf(":%02d", $sec) if $args{'Seconds'};
+ $time .= sprintf " %s%02d%02d", $self->_SplitOffset( $offset );
+ }
+
+ return join ' ', grep $_, ($date, $time);
+}
+
+=head3 RFC2616 (HTTP)
+
+Returns the object's date and time in RFC2616 (HTTP/1.1) format,
+for example C<Sun, 06 Nov 1994 08:49:37 GMT>. While the RFC describes
+version 1.1 of HTTP, but the same form date can be used in version 1.0.
+
+Format is fixed length, locale independand and always represented in GMT
+what makes it quite useless for users, but any date in HTTP transfers
+must be presented using this format.
+
+ HTTP-date = rfc1123 | ...
+ rfc1123 = wkday "," SP date SP time SP "GMT"
+ date = 2DIGIT SP month SP 4DIGIT
+ ; day month year (e.g., 02 Jun 1982)
+ time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+ ; 00:00:00 - 23:59:59
+ wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"
+ month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun"
+ | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
+
+Supports arguments: C<Date> and C<Time>, but you should use them only for
+some personal reasons, RFC2616 doesn't define any optional parts.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub RFC2616 {
+ my $self = shift;
+ my %args = ( Date => 1, Time => 1,
+ @_,
+ Timezone => 'utc',
+ Seconds => 1, DayOfWeek => 1,
+ );
+
+ my $res = $self->RFC2822( %args );
+ $res =~ s/\s*[+-]\d\d\d\d$/ GMT/ if $args{'Time'};
+ return $res;
+}
+
+=head4 iCal
+
+Returns the object's date and time in iCalendar format,
+
+Supports arguments: C<Date> and C<Time>.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub iCal {
+ my $self = shift;
+ my %args = (
+ Date => 1, Time => 1,
+ @_,
+ );
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydaym,$isdst,$offset) =
+ $self->Localtime( 'utc' );