/blog/perl


substr() in Perl
[133074 mal gelesen]
foreach in Perl
[119704 mal gelesen]
Arrays in Perl - Besonderheiten
[113471 mal gelesen]
open() - Dateien öffnen in Perl
[100556 mal gelesen]
split() in Perl - Zeichenketten teilen
[95460 mal gelesen]
chomp() in Perl
[87274 mal gelesen]
grep - Listen durchsuchen in Perl
[84510 mal gelesen]
push in Perl
[82213 mal gelesen]
sleep in Perl - Das aktuelle Script warten lassen
[64906 mal gelesen]
print in Perl
[51482 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 26826 mal gelesen.

Kommentar schreiben  Druckansicht  Seitenanfang 
Beurteilen 






 Zufällige Beiträge im /blog/perl

lcfirst () - Erstes Zeichen einer Zeichenkette in Kleinbuchstaben umwandeln

Unicode mit Perl - Einfache (?) Anwendung

Epoche live in Datum umwandeln

Sonderzeichen konvertieren für Tag-Cloud

Cache.pm - Cache-Modul für Perl - A Cache-Module for Perl

LWP::Simple - Modulbeschreibung in Deutsch

getc - Nächstes Zeichen aus Datei lesen

IP-Adresse anhand des Domainnamens herausfinden

Umgebungsvariablen in Perl

Mein Cache-Modul für Perl - Fortsetzung



0.0163199901580811 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: Hummel
Kommentar:
@ Peter

Zum Beitrag


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



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
18.7.2019

Es ist
5:04:57 Uhr

Ihre IP:
18.206.241.26

Blog-Einträge: 186

Die letzten 24 Stunden im Überblick


Gelesene Beiträge insgesamt:
3841247


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
1234567
891011121314
15161718192021
22232425262728
293031

Impressum