Utilisation de cette fonction:
perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
7 Réponses :
Vous avez juste besoin de définir le fuseau horaire. Essayez:
env TZ=UTC+1 perl -e 'use Time::Local; print timelocal("00","00","00","01","01","2000"),"\n";'
Timezones TLA sont ambiguës et mal définis. Il est préférable d'utiliser ZoneInfo Noms: TZ = Europe / Berlin Perl ... code>
Voici un lien directement au Liste des chaînes de fuseau horaire valides AKA ZONE.TAB code>.
Il n'y a qu'une seule définition standard pour EPOCHTIME, basée sur l'UTC, et non des épochtimes différents pour différents fuseaux horaires.
Si vous souhaitez trouver le Décalage entre GMTime et localTime , utilisez P>
use Time::Local; @t = localtime(time); $gmt_offset_in_seconds = timegm(@t) - timelocal(@t);
heure :: local :: timelocal code> est l'inverse de
localTime code>. Le résultat sera dans l'heure locale de votre hôte:
$ perl -MTime::Local -le \
'print scalar localtime timegm "00","00","00","01","01","2000"'
Tue Feb 1 01:00:00 2000
Pendant le temps :: Local est une solution raisonnable, vous risquez peut-être d'utiliser le module d'objet DateTime plus moderne. Voici un exemple: pour les fuseaux horaires, vous pouvez utiliser le module DateTime :: Timezone. P> use strict;
use DateTime;
use DateTime::TimeZone;
my $dt = DateTime->now;
my $tz = DateTime::TimeZone->new(name => "local");
$dt->add(seconds => $tz->offset_for_datetime($dt));
print $dt->epoch, "\n";
use DateTime; my $dt = DateTime->now; $dt->set_time_zone( 'Europe/Madrid' );
Réponse très propre. Voici une liste de fuseaux horaires: en.wikipedia.org/wiki/list_of_tz_database_Time_zones
Si vous souhaitez modifier une valeur temporelle d'un fuseau horaire à un autre fuseau horaire, vous devez être capable de Indiquez les deux trimestres. strong> p> p> p> P> Après tout, si vous définissez si vous souhaitez convertir si vous utilisez dans le code ci-dessous, je démontre Comment initialiser l'objet DateTime à la droite Démarrage Timezone ( Je n'ai pas pu trouver un Perl Sandbox Online avec le module code> DateTime CPPAN INSTALLÉ INSTALLÉ. P> "12:30" code> sur le temps GMT ou US / Est ou vénézuélien, ce qui signifie ajouter / soustraire une quantité d'heures ou d'heures et de minutes, Vous devez savoir quel fuseau horaire est le fuseau horaire de départ, em> autrement, le calcul ne saura pas combien d'ajouter ou de soustraire. p>
DateTime-> maintenant; code>, le fuseau horaire est en panne sur le temps système, ce qui peut ne pas être le fuseau horaire que vous souhaitez convertir de. Em> p>
depuis tempszone >) et comment convertir cette heure à l'horaire de fin (
TOTHZONE code>) ... P>
Code de travail h3>
use strict;
use DateTime;
sub convertTimeZonesForTime {
my ($args) = @_;
my $time = $args->{time};
my $date = $args->{date};
my $totimezone = $args->{totimezone};
my $fromtimezone = $args->{fromtimezone};
my $format = $args->{format} || '%H:%M:%S';
my ($year, $month, $day) = map {int $_} split('-', $date);
my ($hour, $minute, $second) = map {int $_} split(':', $time);
$year ||= 1999 if !defined $year;
$month ||= 1 if !defined $month;
$day ||= 1 if !defined $day;
$hour ||= 12 if !defined $hour;
$minute ||= 30 if !defined $minute;
$second ||= 0 if !defined $second;
my $dt = DateTime->new(
year=>$year,
month=>$month,
day=>$day,
hour=>$hour,
minute=>$minute,
second=>$second,
time_zone => $fromtimezone,
);
my $formatter = new DateTime::Format::Strptime(pattern => $format);
$dt->set_formatter($formatter);
$dt->set_time_zone($totimezone);
return "$dt";
}
print(convertTimeZonesForTime({
'totimezone'=>'America/Denver',
'fromtimezone'=>'US/Eastern',
'time'=>'12:30:00',
}));