Hallo, in meine Webseiten setze ich das Aktualisierungsdatum mit der Konstruktion print strftime "%e. %B %Y" ein. Nun gibt das auf einigen Seiten bei schmalen Browserfenstern Darstellungsprobleme, so dass ich nach einer anderen Loesung suche. print strftime "%e. %b %Y" waere eine Loesung, wenn Monate wie z.B. der Juli nicht als "Jul." abgekuerzt wuerden. Aber eigentlich reichte es auch aus, wenn die Monate als Zahlen ausgegeben wuerden. Doch print strftime "%e. %d %Y" setzt die Monate immer zweistellig, also ggfs. mit einer fuehrenden Null. Achso, das Script setzt LC_ALL uebrigens auf de_DE.utf8. Wenn einer eine idee hat, wie sich die Monate sauber abkuerzen lassen oder die fuehrende Null eliminiert werden koennen, waere das sehr schoen. Beste Gruesse, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
* Heinz W. Pahlke
Aber eigentlich reichte es auch aus, wenn die Monate als Zahlen ausgegeben wuerden. Doch print strftime "%e. %d %Y" setzt die Monate immer zweistellig, also ggfs. mit einer fuehrenden Null.
welche Programmiersprache überhaupt? Also nach meinen Informationen geben %e und %d beide den Tag aus, also verstehe ich das Format nicht. Ich bevorzuge das ISO-Format %Y-%m-%d. Kompakt, eindeutig, inter- national und in Listen/Dateinamen automatisch richtig sortiert. Gruß, Bernhard -- Erst wenn der letzte Baum gerodet, der letzte Fluss vergiftet, der letzte Fisch gefangen ist, werdet ihr feststellen, dass man Geld nicht essen kann. -- Indianische Weisheit
Hallo, On 05-Oct-2004 Bernhard Walle wrote:
* Heinz W. Pahlke
[2004-10-05 14:09]: Aber eigentlich reichte es auch aus, wenn die Monate als Zahlen ausgegeben wuerden. Doch print strftime "%e. %d %Y" setzt die Monate immer zweistellig, also ggfs. mit einer fuehrenden Null.
welche Programmiersprache überhaupt? Also nach meinen Informationen geben %e und %d beide den Tag aus, also verstehe ich das Format nicht.
%e loescht eine fuehrende Null, %d laesst sie stehen.
Ich bevorzuge das ISO-Format %Y-%m-%d. Kompakt, eindeutig, inter- national und in Listen/Dateinamen automatisch richtig sortiert.
Um mir das Schreiben von Webseiten zu erleichtern, benutze ich wml, das auf perl zurueckgreift. Das Aktualisierungsdatum setze ich z.B. mit der folgenden Konstruktion ein: ------------------------------------8<---------------------------------- ..FOOTER>> <p>Letzte Aktualisierung: <: use locale; use POSIX; setlocale(LC_ALL, "de_DE.utf8"); print strftime "%e. %B %Y", localtime($(WML_SRC_TIME)); :>. Design by <a href="http://www.Pahlke-KunstWebDesign.de/" title="www.Pahlke-KunstWebDesign.de">Pahlke-KunstWebDesign</a></p> <<.. ------------------------------------>8---------------------------------- Beste Gruesse, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
* Heinz W. Pahlke
On 05-Oct-2004 Bernhard Walle wrote:
* Heinz W. Pahlke
[2004-10-05 14:09]: Aber eigentlich reichte es auch aus, wenn die Monate als Zahlen ausgegeben wuerden. Doch print strftime "%e. %d %Y" setzt die Monate immer zweistellig, also ggfs. mit einer fuehrenden Null.
welche Programmiersprache überhaupt? Also nach meinen Informationen geben %e und %d beide den Tag aus, also verstehe ich das Format nicht.
%e loescht eine fuehrende Null, %d laesst sie stehen.
Schon, aber wozu brucht man %e und %d in einer Datumsangabe? Gruß, Bernhard -- "I might disagree with what you have to say, but I'll defend to the death your right to say it." -- Voltaire
Hallo Heinz! Heinz W. Pahlke schrieb am 05.10.2004 15:29 :
print strftime "%e. %B %Y", localtime($(WML_SRC_TIME));
Diese Zeile würde ich intuitiv durch diese Zeilen ersetzen: my ($localday, $localmonth, $localyear) = split(/::/, strftime("%e::%B::%Y", localtime($(WML_SRC_TIME)))); # fuehrende Null vom Monat entfernen if(substr($localmonth, 0, 1) eq "0") { $localmonth = substr($localmonth, 1); } print $localday, ". ", $localmonth, " ", $localyear, localtime($(WML_SRC_TIME)); Ich habe das jetzt mal schnell niedergeschrieben, ohne es zu testen. Das Testen überlasse ich dir ;-) Gruß, Michael
Hi nochmals! Vergiss meinen letzten Vorschlag. Der war sehr suboptimal ;-) Dieses hier sollte funktionieren: (my $formatted_date = strftime("%d:%m:%Y", localtime)) =~ s/[0]?(\d+):[0]?(\d+):(.*)/$1.".".$2.".".$3/e; print $formatted_date; Bei mir hat dieser Schnipsel funktioniert. Ich habe %d statt %e verwendet, da %e anscheinend mit ActivePerl unter Windows nicht funktioniert. Gruß, Michael
Hallo, On 05-Oct-2004 Michael Wenger wrote:
Vergiss meinen letzten Vorschlag. Der war sehr suboptimal ;-)
Hatte ich noch gar nicht probiert, da ich eben erst wieder nach Hause gekommen bin.
Dieses hier sollte funktionieren: (my $formatted_date = strftime("%d:%m:%Y", localtime)) =~ s/[0]?(\d+):[0]?(\d+):(.*)/$1.".".$2.".".$3/e; print $formatted_date;
Bei mir hat dieser Schnipsel funktioniert. Ich habe %d statt %e verwendet, da %e anscheinend mit ActivePerl unter Windows nicht funktioniert.
Ich baue es mal ein und probiere es. Einen schoenen Abend, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
Hi Heinz! Heinz W. Pahlke schrieb am 05.10.2004 21:47 :
On 05-Oct-2004 Michael Wenger wrote:
(my $formatted_date = strftime("%d:%m:%Y", localtime)) =~ s/[0]?(\d+):[0]?(\d+):(.*)/$1.".".$2.".".$3/e; print $formatted_date;
Ich baue es mal ein und probiere es.
In deiner anderen Mail hattest du dies hier geschrieben:
[...]Das Datum muss naemlich aus der Variablen WML_SRC_TIME ausgelesen werden.[...]
Ich habe das Skript geändert, damit 'WML_SRC_TIME' verwendet wird und noch ein paar Vereinfachungen vorgenommen: (my $formatted_date = strftime("%d.%m.%Y", localtime($(WML_SRC_TIME)))) =~ s/[0 ]?(\d+\.)[0]?(\d+\.)(.*)/$1$2$3/; print $formatted_date; Ich hatte bei mir 'localtime' verwendet, da bei mir die spezielle Variable 'WML_SRC_TIME' nicht definiert ist.
Einen schoenen Abend,
Dir auch. Gruß, Michael
Hallo Michael, On 05-Oct-2004 Michael Wenger wrote:
Ich habe das Skript geändert, damit 'WML_SRC_TIME' verwendet wird und noch ein paar Vereinfachungen vorgenommen:
(my $formatted_date = strftime("%d.%m.%Y", localtime($(WML_SRC_TIME)))) =~ s/[0 ]?(\d+\.)[0]?(\d+\.)(.*)/$1$2$3/; print $formatted_date;
Hervorragend. So macht es genau das, was ich wollte :-)) Nachdem ich die letzten eineinhalb Wochen dauernd unterwegs war, bin ich einfach nicht frueher dazu gekommen, das Script zu testen. Vielen Dank und beste Gruesse, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
Hallo Michael, On 05-Oct-2004 Michael Wenger wrote:
Heinz W. Pahlke schrieb am 05.10.2004 15:29 :
print strftime "%e. %B %Y", localtime($(WML_SRC_TIME));
Diese Zeile würde ich intuitiv durch diese Zeilen ersetzen:
my ($localday, $localmonth, $localyear) = split(/::/, strftime("%e::%B::%Y", localtime($(WML_SRC_TIME))));
# fuehrende Null vom Monat entfernen if(substr($localmonth, 0, 1) eq "0") { $localmonth = substr($localmonth, 1); }
print $localday, ". ", $localmonth, " ", $localyear, localtime($(WML_SRC_TIME));
Ich habe das jetzt mal schnell niedergeschrieben, ohne es zu testen. Das Testen überlasse ich dir ;-)
Okay, hier das Ergebnis: 5. Oktober 20042921135910422781 :-( Trotzdem denke ich, dass ich hier weitersuchen sollte. Das Datum muss naemlich aus der Variablen WML_SRC_TIME ausgelesen werden. Wenn ich z.B. Aenderungen in dem obigen Script durchfuehre, darf sich das Datum der Webseite _nicht_ veraendern. Eine der Fragen ist allerdings auch, wo der Inhalt von WML_SRC_TIME gespeichert wird. Das Dumme ist naemlich, dass ich mir mit den anderen Versuchen diesen Wert ueberschrieben habe und alle Seiten auf den 5.10.2004 gesetzt wurden. Damit kann ich jetzt aber natuerlich erst einmal nicht mehr das Loeschen der fuehrenden Null testen. Beste Gruesse, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
Hallo, Am Tue, 05 Oct 2004, Heinz W. Pahlke schrieb:
On 05-Oct-2004 Bernhard Walle wrote:
* Heinz W. Pahlke
[2004-10-05 14:09]: Aber eigentlich reichte es auch aus, wenn die Monate als Zahlen ausgegeben wuerden. Doch print strftime "%e. %d %Y" setzt die Monate immer zweistellig, also ggfs. mit einer fuehrenden Null.
welche Programmiersprache überhaupt? Also nach meinen Informationen geben %e und %d beide den Tag aus, also verstehe ich das Format nicht.
%e loescht eine fuehrende Null, %d laesst sie stehen.
Ich bevorzuge das ISO-Format %Y-%m-%d. Kompakt, eindeutig, inter- national und in Listen/Dateinamen automatisch richtig sortiert.
Um mir das Schreiben von Webseiten zu erleichtern, benutze ich wml, das auf perl zurueckgreift. Das Aktualisierungsdatum setze ich z.B. mit der folgenden Konstruktion ein:
------------------------------------8<----------------------------------
..FOOTER>>
<p>Letzte Aktualisierung: <: use locale; use POSIX; setlocale(LC_ALL, "de_DE.utf8");
print strftime "%e. %B %Y", localtime($(WML_SRC_TIME)); :>. Design by <a href="http://www.Pahlke-KunstWebDesign.de/" title="www.Pahlke-KunstWebDesign.de">Pahlke-KunstWebDesign</a></p>
<<..
Also ich kann das nicht nachvollziehen (perl 5.8.0): $ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); for $fmt ("%e.%b.%Y", "%e.%m.%Y", "%d.%b.%Y","%d.%m.%Y") { print "»", strftime($fmt, localtime()), "«\n"; }' » 5.Okt.2004« » 5.10.2004« »05.Okt.2004« »05.10.2004« Oder eben, eine Moeglichkeit das fuehrende Leerzeichen loszubekommen: $ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); @t=localtime(); printf "»%i.%s«\n", strftime("%e", @t), strftime("%m.%Y", @t);' »5.10.2004« Oder auch per s/// nachbearbeiten: $ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); ( $d = strftime("%e.%m.%Y", localtime()) ) =~ s/^ //; print "$d\n";' Noch Fragen? HTH, -dnh -- CH3-¬_ _ _ _ CH3-<_>-<_>-<_>-<_> <_>-<_>-<_>-<_> <_>-<_>-<_>-<_> 1,2-dimethylchickenwire -- after A. Dalgeish
Hallo, On 05-Oct-2004 David Haller wrote:
Also ich kann das nicht nachvollziehen (perl 5.8.0):
Logisch...
$ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); for $fmt ("%e.%b.%Y", "%e.%m.%Y", "%d.%b.%Y","%d.%m.%Y") { print "»", strftime($fmt, localtime()), "«\n"; }' » 5.Okt.2004« » 5.10.2004« »05.Okt.2004« »05.10.2004«
...der Oktober wird eben auch als 10 geschrieben und mit einer fuehrenden Null ergaenzt werden nur einstellige Monatszahlen. Zumindest habe ich man strftime so verstanden.
Oder eben, eine Moeglichkeit das fuehrende Leerzeichen loszubekommen:
$ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); @t=localtime(); printf "»%i.%s«\n", strftime("%e", @t), strftime("%m.%Y", @t);' »5.10.2004«
Oder auch per s/// nachbearbeiten:
$ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); ( $d = strftime("%e.%m.%Y", localtime()) ) =~ s/^ //; print "$d\n";'
Noch Fragen?
Keine Ahnung. Bin eben erst wieder nach Hause gekommen und muss jetzt mal die diversen Loesungen einbauen und testen. Einen schoenen Abend, Heinz. -- http://www.pahlke-online.de/reisenews/ http://www.Pahlke-KunstWebDesign.de/
Hallo, Am Tue, 05 Oct 2004, Heinz W. Pahlke schrieb:
On 05-Oct-2004 David Haller wrote:
Also ich kann das nicht nachvollziehen (perl 5.8.0):
Logisch...
$ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); for $fmt ("%e.%b.%Y", "%e.%m.%Y", "%d.%b.%Y","%d.%m.%Y") { print "»", strftime($fmt, localtime()), "«\n"; }' » 5.Okt.2004« » 5.10.2004« »05.Okt.2004« »05.10.2004«
...der Oktober wird eben auch als 10 geschrieben und mit einer fuehrenden Null ergaenzt werden nur einstellige Monatszahlen. Zumindest habe ich man strftime so verstanden.
Ja. Da hab' ich dich missverstanden. $ perl -MPOSIX -Mlocale -e ' setlocale(LC_ALL, "de_DE.utf8"); printf "%i.%i.%i\n", split(" ", strftime ("%d %m %Y", localtime(0)));' 1.1.1970 Entscheidend ist hier, dass du dem 'printf' die einzelnen Datumsteile als Array uebergibst (damit eben die verschiedenen Teile des Formats des printf angewendet werden). Das erledigt das 'split'. Als Trennzeichen kannst du natuerlich auch was anderes als ein Leerzeichen nehmen. Achso: localtime(0) ist eben "0 Sekunden seit dem 1.1.1970 00:00 Uhr". Man koennte das Ergebnis von strftime auch per s/// oder so nachbearbeiten. -dnh -- Das kommt davon, wenn man bei dem regenwetter keine Mütze aufzieht. Dann weicht bei vielen das Gehirn auf. [WoKo in dag°]
participants (4)
-
Bernhard Walle
-
David Haller
-
Heinz W. Pahlke
-
Michael Wenger