Jag brukar använda Date::Format som finns i TimeDate den ger ungefär samma möjligheter som finns i *nix date fast helt plattformsoberoende :)
Vill du inte förlita dig på en extern modul, kan du använda den här funktionen:
#!/usr/bin/perl -w
use strict;
sub FormatDate {
# FormatDate( <Mall>, <Språk>, <Tid> );
#
# År
# %yy två sissta siffrorna.
# %yyyy alla fyra siffrorna.
#
# Månad
# %m siffror utan inledande nolla.
# %mm siffror med inledande nolla.
# %mmm förkortning av månadens namn.
# %mmmm månadens namn.
#
# Dag
# %d siffror utan inledande nolla.
# %dd siffror med inledande nolla.
# %ddd förkortning av dagens namn.
# %dddd dagens namn.
#
# Timmar
# %h 12-timmars format utan inledande nolla.
# %hh 12-timmars format med inledande nolla.
# %H 24-timmars format utan inledande nolla.
# %HH 24-timmars format med inledande nolla.
#
# Minuter
# %M utan inledande nolla.
# %MM med inledande nolla.
#
# Sekunder
# %S utan inledande nolla.
# %SS med inledande nolla.
#
#
# Exempel:
#
# 2001-01-01 '%yyyy-%mm-%dd'
# 2001-01-01 12:00:00 '%yyyy-%mm-%dd %H:%M:%S'
# Måndag den 1 Januari 2001 '%dddd den %d %mmmm %yyyy'
# 1 Januari 2001 '%d %mmmm %yyyy'
my ( $template, $lang, $ctime ) = @_;
my %language = (
de => {
days => [
'Sonntag', 'Montag', 'Dienstag', 'Mittwoch',
'Donnerstag', 'Freitag', 'Samstag'
],
months => [
'Januar', 'Februar', 'März', 'April',
'Mai', 'Juni', 'Juli', 'August',
'September', 'Oktober', 'November', 'Dezember'
],
},
en => {
days => [
'Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'
],
months => [
'January', 'February', 'March', 'April',
'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'
],
},
sv => {
days => [
'Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag',
'Fredag', 'Lördag'
],
months => [
'Januari', 'Februari', 'Mars', 'April',
'Maj', 'Juni', 'Juli', 'Augusti',
'September', 'Oktober', 'November', 'December'
],
},
);
$ctime ||= time();
$template ||= '%yyyy-%mm-%dd';
$lang = defined($lang) ? defined( $language{$lang} ) ? $lang : 'en' : 'en';
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime($ctime);
my $newhour = ( $hour > 12 ) ? $hour - 12 : ( $hour == 0 ) ? 12 : $hour;
my %date = (
d => $mday,
dd => ( $mday < 10 ) ? "0$mday" : $mday,
ddd => substr( @{ $language{$lang}{'days'} }[$wday], 0, 3 ),
dddd => @{ $language{$lang}{'days'} }[$wday],
m => $mon + 1,
mm => ( ( $mon + 1 ) < 10 ) ? "0" . ( $mon + 1 ) : ( $mon + 1 ),
mmm => substr( @{ $language{$lang}{'months'} }[$mon], 0, 3 ),
mmmm => @{ $language{$lang}{'months'} }[$mon],
S => $sec,
SS => ( $sec < 10 ) ? "0$sec" : $sec,
M => $min,
MM => ( $min < 10 ) ? "0$min" : $min,
h => $newhour,
H => $hour,
hh => ( $newhour < 10 ) ? "0$newhour" : $newhour,
HH => ( $hour < 10 ) ? "0$hour" : $hour,
yy => substr( 1900 + $year, 2, 2 ),
yyyy => 1900 + $year,
tt => ( $hour > 12 ) ? "PM" : "AM",
);
$template =~ s/%([a-zA-Z]+)/{ defined( $date{$1} ) ? $date{$1} : "%$1" }/eg;
return $template;
}
print
FormatDate(), "\n",
FormatDate( '%d %mmmm %yyyy' ), "\n",
FormatDate( '%d %mmmm %yyyy', 'sv' ), "\n",
FormatDate( '%dddd den %d %mmmm %yyyy', 'sv', 978346800 ), "\n";
------------------
Hansen
c.h@ngmedia.com
[Redigerat av Hansen den 05 jul 2001]