/blog/perl


substr() in Perl
[154170 mal gelesen]
foreach in Perl
[129166 mal gelesen]
Arrays in Perl - Besonderheiten
[125384 mal gelesen]
split() in Perl - Zeichenketten teilen
[113580 mal gelesen]
open() - Dateien öffnen in Perl
[108992 mal gelesen]
grep - Listen durchsuchen in Perl
[94729 mal gelesen]
chomp() in Perl
[93644 mal gelesen]
push in Perl
[90859 mal gelesen]
sleep in Perl - Das aktuelle Script warten lassen
[75984 mal gelesen]
index() in Perl - Zeichenkette in Zeichenkette suchen
[59577 mal gelesen]


Arrays
Dateien
HTPC
Hashes
Leistungsoptimiert
PHP
Perl
RegEx
Schleifen
Script
Skalare
Sonstiges
System
Webserver
Zur Startseite


Sonntag, 25.3.2007, 00:03:53 Uhr

Uhrzeit und Datum bestimmen in Perl


Wie man bei time gesehen hat, ist Perl ja durchaus in der Lage, die Systemzeit auszugeben. Aber die Zeit in Sekunden seit 1.1.1970 bringt einen nicht wirklich weiter...
Deswegen gibt es in Perl noch die Funktion localtime(). Man kann der Funktion localtime einen beliebigen Wert übergeben, der kompatibel ist zu time ist, und localtime errechnet daraus Tag, Stunde, Minute, Sekunde, Monat, Jahr, Wochentag, Jahrestag und Sommerzeit.

use strict;

my %zeit=&Aktuelle_Zeit;
my $wzsz='';
if ($zeit{sommerzeit} == 0){$wzsz="Winterzeit";} else { $wzsz="Sommerzeit";}
print "$zeit{wochentagtext}, $zeit{tag}.$zeit{monat}.$zeit{jahr}, $zeit{stunde}:$zeit{minute}:$zeit{sekunde} Uhr $wzsz";

############
# Zeit- und Datumsfunktion
#################################
sub Aktuelle_Zeit{
my @wochentage = ("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
my @monatsnamen = ("","Januar","Februar","März","April", "Mai","Juni","Juli","August","September","Oktober", "November","Dezember");
my ($sec,$min,$hour,$heutetag,$heutemonat,$heutejahr,$wday,$yday,$isdst) = localtime(time);
$heutemonat++;
$heutejahr+=1900;
$wday--;
if ($wday eq '-1'){$wday=6;}

$hour="0$hour" if (length($hour) == 1);
$min="0$min" if (length($min) == 1);
$sec="0$sec" if (length($sec) == 1);

my %werte=();
$werte{stunde}=$hour;
$werte{minute}=$min;
$werte{sekunde}=$sec;
$werte{tag}=$heutetag;
$werte{monat}=$heutemonat;
$werte{jahr}=$heutejahr;
$werte{wochentag}=$wday;
$werte{jahrestag}=$yday;
$werte{sommerzeit}=$isdst;

my $tagalstext=$wochentage[$wday];
$werte{wochentagtext}=$tagalstext;

my $monatalstext=$monatsnamen[$heutemonat];
$werte{monattext}=$monatalstext;
return %werte;
}


Ich habe mal ne kleine Subroutine geschrieben, die als Rückgabewert ein Hash zurückgibt, das alle Werte enthält. Mit diesem Unterprogramm kann man auf leichte Weise die aktuellen Zeit- und Datumsdaten abfragen und ausgeben.

Die einzelnen Werte findet man im Hash unter:
- stunde
- minute
- sekunde
- tag
- monat
- jahr
- wochentag: 0 (Montag) - 6 (Sonntag)
- jahrestag: Wievielter Tag des Jahres
- sommerzeit: ist Sommerzeit?
- tagalstext: Wochentag als Text
- monatalstext: Monat als Text




Kommentare zum Beitrag "Uhrzeit und Datum bestimmen in Perl"

Kommentar von Perl-Uwe
http://search.cpan.org/perldoc?DateTime

Perl 4 ist seit Jahren tot :-)

Kommentar von Admin

Toller Kommentar... was will uns der Gast damit sagen? Ja: Es gibt das Modul und ja, man spricht in letztet Zeit immer öfters von Perl 6...

Und um etwas konstruktiver mit diesem Kommentar umzugehen:
Warum soll ich mir ein Modul suchen und ggf. erst installieren, wenn überhaupt möglich, da es vielleicht auf nem Webserver laufen muß, auf dem ich selbst nix installieren kann, das das Gleiche kann wie die eingebaute Funktion von Perl?

Ich hab mir das Modul eben mal näher angesehen, und da reicht es mir schon wenn ich lese:
"KNOWN BUGS

The tests in 20infinite.t seem to fail on some machines, particularly on Win32. This appears to be related to Perl's internal handling of IEEE infinity and NaN, and seems to be highly platform/compiler/phase of moon dependent.

If you don't plan to use infinite datetimes you can probably ignore this. This will be fixed (somehow) in future versions."

Was ich mal frei übersetze mit:
Die Tests in 20infinite.t funktionieren manchmal nicht, vor allem auf Windows-Maschinen... der Fehler wird behoben irgendwann in späteren Versionen...
Vielleicht funktioniert auch mehr nicht? Warum soll ich ne Funktion verwenden, die bekanntermaßen Fehler hat?
Und überhaupt: Muß für jedes Teilproblem ein Modul verwendet werden? Wird nicht gerade deshalb Perl immer weiterentwickelt, weil sich nicht jeder auf der Schiene "Ich kenn da ein Modul, das macht alles prima für mich..." bewegt?

Kommentar von Renee Bäcker

Ich würde da an dem Code noch etwas anders machen.

Aus:

$hour="0$hour" if (length($hour) == 1);
$min="0$min" if (length($min) == 1);
$sec="0$sec" if (length($sec) == 1);


würde ich

$hour = sprintf "%02d",$hour;
$min = sprintf "%02d",$min;
$sec = sprintf "%02d",$sec;


machen und aus

my %werte=();
$werte{stunde}=$hour;
$werte{minute}=$min;
$werte{sekunde}=$sec;
$werte{tag}=$heutetag;
$werte{monat}=$heutemonat;
$werte{jahr}=$heutejahr;
$werte{wochentag}=$wday;
$werte{jahrestag}=$yday;
$werte{sommerzeit}=$isdst;

my $tagalstext=$wochentage[$wday];
$werte{wochentagtext}=$tagalstext;

my $monatalstext=$monatsnamen[$heutemonat];
$werte{monattext}=$monatalstext;


das hier:

my %werte = (
stunde => $hour,
minute => $min,
sekunde => $sec,
tag => $heutetag,
monat => $heutemonat,
jahr => $heutejahr,
wochentag => $wday,
jahrestag => $yday,
sommerzeit => $isdst,
wochentagtext => $wochentage[$wday],
monattext => $monatsnamen[$heutemonat],
);


Uwe hat schon recht, dass man viele solcher Sachen mit CPAN-Modulen lösen kann. Aber manchmal braucht man seine eigene Sub...

P.S.: Es wäre schön, wenn man in Kommentaren auch etwas wie "Code-Tags" hätte.

Kommentar von Admin

Code Tags sind eingebaut... Schön?



Kommentar von Perl-Uwe
DateTime ist ein sehr weit verbreitetes und vielgenutztes CPAN-Modul. Es läuft auch unter Windows problemlos. (Der von Dir angesprochene Bug bezieht sich auf ein selten genutztes Feature - "unendlich" als Datumsangabe.)

Man kann auch als Nicht-Root Module installieren. Mit einem bloßen FTP-Zugang ist das sicher bei einem XS-Modul für einen weniger erfahrenen Perl-Programmierer schwierig, da stimme ich Dir zu. Aber beim Hosting habe ich sowieso eine andere Meinung (Stichwort: mod_cgi vs. mod_perl/FastCGI).

Natürlich ist für das reine Ermitteln der aktuellen Zeit kein CPAN-Modul notwendig. Aber die Anforderungen wachsen ja. Spätestens wenn man Datumsarithmetik machen möchte (welcher Tag/Monat ist in drei Tagen), sollte man zu DateTime greifen. Sich schon vorher damit vertraut zu machen kann m. E. nicht schaden.

Uwe Völker
http://www.perl-uwe.de/

Kommentar von Admin
Ist ja richtig... Aber ich wollte ja vor allem rüberbringen, wie die Grundfunktion funktioniert.
Wobei ich noch dazu sagen möchte: Zeitabstände könnte man dann auch noch mit timelocal errechnen... aber das später. Und dann gibts auch ne kleine Anleitung zu dem oben genannten Modul.

Kommentar von melinda
Danke schon admin



Thema: Perl Script

Der Beitrag "Uhrzeit und Datum bestimmen in Perl" wurde 30391 mal gelesen.

Kommentar schreiben  Druckansicht  Seitenanfang 
Beurteilen 






 Zufällige Beiträge im /blog/perl

Vordefinierte Variablen in Perl

Speedtest File::Find

Interessante Schreibweisen in Perl

Doppelte Elemente aus Array entfernen - Und die Reihenfolge beibehalten!

my in Perl

utime - Zeitstempel von Dateien oder Verzeichnissen ändern in Perl

HTML-Code ausgeben mit Perl

Shift in Perl

Befehle, die standartmäßig $_ verwenden, und solche, die das nicht tun



0.0252330303192139 sec. to build



...Blogsoftware in pure Perl - Powered by a lot of Coffee...


SSD-Festplatte - Wassn das???
Die Transliteration - Nur ein Zeichen in einem Skalar ersetzen
Select - Case in Perl
Windows 7 XP Mode – Wo finde ich den XP-Modus unter Windows 7?
Mac-Adresse beim Apple Macintosh herausfinden
SGN-Funktion für Perl

Eigene IP herausfinden mit Perl
Epoche live in Datum umwandeln
Firefox 3 - Exe-Files downloaden


Gesamtverzeichnis
Februar 2010
Dezember 2009
Oktober 2009
Januar 2009
Dezember 2008
November 2008
September 2008
August 2008
Juli 2008
Juni 2008
Mai 2008
April 2008
Januar 2008
Dezember 2007
November 2007
Oktober 2007
September 2007
August 2007
Juni 2007
Mai 2007
April 2007
März 2007
Februar 2007
Januar 2007
Dezember 2006


Mister Wong

RSS-Feed

Heute ist der
23.11.2024

Es ist
16:38:01 Uhr

Ihre IP:
3.15.34.50

Blog-Einträge: 186

Die letzten 24 Stunden im Überblick


Gelesene Beiträge insgesamt:
4424045


Webseiten vergleichen
Kalender mit Feiertagen - 2028
Links finden und testen
Menschliche Datumsangaben
IP zu Domain herausfinden
Time live in Datum umwandeln
Perl für Windows



Impressum