/blog/perl


substr() in Perl
[127908 mal gelesen]
foreach in Perl
[116785 mal gelesen]
Arrays in Perl - Besonderheiten
[109927 mal gelesen]
open() - Dateien öffnen in Perl
[98187 mal gelesen]
split() in Perl - Zeichenketten teilen
[89818 mal gelesen]
chomp() in Perl
[84894 mal gelesen]
grep - Listen durchsuchen in Perl
[82184 mal gelesen]
push in Perl
[79221 mal gelesen]
sleep in Perl - Das aktuelle Script warten lassen
[61788 mal gelesen]
print in Perl
[50029 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 26202 mal gelesen.

Kommentar schreiben  Druckansicht  Seitenanfang 
Beurteilen 






 Zufällige Beiträge im /blog/perl

Sonderzeichen konvertieren für Tag-Cloud

Die Schwartzsche Transformation - Arrays sortieren nach mehreren Kriterien

truncate - Dateigröße verändern in Perl

undef in Perl

lc() in Perl - Alle Buchstaben in Kleinbuchstaben umwandeln

Eine Datei zeilenweise einlesen mit Perl

length() in Perl

redo - Schleife erneut durchlaufen

utime - Zeitstempel von Dateien oder Verzeichnissen ändern in Perl



0.0159058570861816 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
truncate - Dateigröße verändern in Perl
Eigene IP herausfinden mit Perl
Epoche live in Datum umwandeln
Firefox 3 - Exe-Files downloaden


Von: Fabian
Kommentar:
Hallo zusammen,
ich suche schon etwas im Internet und bin bisher nicht fündig geworden.
Zum Beitrag


Von: Schorschel eastcoast
Kommentar:
Danke. Das hat mir weitergeholfen.
Zum Beitrag


Von: Jessica
Kommentar:
Kann man auch zwei Datein parallel einlesen?

Zum Beitrag


Von: Xtravaganz
Kommentar:
Für

Zum Beitrag


Von: Xtravaganz
Kommentar:
Für

Zum Beitrag



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
19.9.2018

Es ist
3:51:28 Uhr

Ihre IP:
54.198.52.82

Blog-Einträge: 186

Die letzten 24 Stunden im Überblick


Gelesene Beiträge insgesamt:
3713540


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



Mo Di Mi Do Fr Sa So
12
3456789
10111213141516
17181920212223
24252627282930

Impressum