[gelöst] awk/date: Zählweise von Kalenderwochen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

[gelöst] awk/date: Zählweise von Kalenderwochen

Beitrag von Phineas » 21.01.2019 17:08:06

Moin,

sehe ich das richtig, dass awk (strftime()) und date zwar die Formatierungen %W (fängt bei 0 an zu zählen) sowie %V (fängt bei 1 an zu zählen) kennen, aber nicht "unsere" Zählweise nach ISO 8601?
Siehe: https://de.wikipedia.org/wiki/Woche#Zäh ... h_ISO_8601

Einen Algorithmus, der entsprechend %W oder %V wählt, bekomme ich hin, aber geht es nicht auch ohne? Z.B. durch setzen einer Umgebungsvariablen?

Natürlich habe ich Manpages gewälzt, aber mein Englisch ist nicht gerade der Knaller, ich übersehe da leicht etwas.
Vielleicht weiß einer von Euch mehr.
Zuletzt geändert von Phineas am 21.01.2019 23:44:24, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk/date: Zählweise von Kalenderwochen

Beitrag von Meillo » 21.01.2019 22:28:42

Meine Manpage von date(1) sagt:
%V ISO week number, with Monday as first day of week
(01..53)
Ich frage mich, welcher ISO-Standard gemeint sein soll, wenn nicht ISO 8601.

Hier die Definition von POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html hat geschrieben: %V
Week of the year (Monday as the first day of the week) as a decimal number [01,53]. If the week containing January 1 has four or more days in the new year, then it shall be considered week 1; otherwise, it shall be the last week of the previous year, and the next week shall be week 1.
Diese Definition sollte wohl der von ISO 8601 entsprechen:
https://de.wikipedia.org/wiki/Woche#Z%C3%A4hlweise_nach_ISO_8601 hat geschrieben: Die Kalenderwoche ist nach ISO 8601 so definiert:

1) Kalenderwochen haben 7 Tage, beginnen an einem Montag und werden über das Jahr fortlaufend nummeriert.
2) Die Kalenderwoche 1 eines Jahres ist diejenige, die den ersten Donnerstag enthält.
Ich sehe gerae noch nicht, wo dein Problem liegt. Vielleicht kannst du es nochmal erklaeren.
Use ed once in a while!

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: awk/date: Zählweise von Kalenderwochen

Beitrag von Phineas » 21.01.2019 23:43:35

Problem ist mein schlechtes Englisch. Manchmal muss ich mit der Nase drauf gestoßen werden, danke dafür, Meillo. :hail:

Ich hätte %V einfach ausprobieren sollen:

Code: Alles auswählen

awk 'BEGIN { for (j=2019;j<=2069;j++) { for (d=1;d<=8; d++) { if (d==8) { print; break }; print strftime("%a, %d.%m.%Y - %V",mktime(j " 01 " d " 00 00 00")) } } }'
Und tatsächlich: Die nächsten 50 Jahre passen, das reicht dicke für mich.

Danke nochmal.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] awk/date: Zählweise von Kalenderwochen

Beitrag von Meillo » 22.01.2019 05:49:37

Schoen, dass sich das Problem so schnell hat loesen lassen. :-)

Ich habe noch folgenden Abschnitt auf der POSIX-Seite gefunden, der den Hintergrund beschreibt und bestaetigt, dass %V ISO 8601 entspricht:
The international standard, based on the ISO 8601:2000 standard where Monday is the first weekday and the algorithm for the first week number is more complex: If the week (Monday to Sunday) containing January 1 has four or more days in the new year, then it is week 1; otherwise, it is week 53 of the previous year, and the next week is week 1. These are represented by the new conversion specifications %u and %V, added as a result of international comments.
Use ed once in a while!

Antworten