Um die zivilen Tage zwischen Veröffentlichungsdaten zu zählen, vergleichen Sie ihre Kalenderdaten, anstatt die verstrichenen Stunden durch 24 zu teilen. Auf einem Mac verarbeitet Numbers reine Datumsangaben; Zeitstempel müssen zunächst in einer festgelegten Zeitzone interpretiert werden.

Diese Anleitung verwendet fiktive Veröffentlichungsdaten und den gregorianischen Kalender. Die Frage lautet: „Wie viele Kalendertage liegen zwischen diesen beiden Veröffentlichungen?“ Standardmäßig wird die Differenz mit Vorzeichen angegeben: Dasselbe Datum ergibt null, der folgende Tag ergibt eins.

Welche Art von Datumsinformationen haben Sie?

Wählen Sie vor der Berechnung Ihren Eingabetyp. Ein auf einer Veröffentlichung aufgedrucktes Datum und ein Zeitstempel, der den Zeitpunkt ihrer Veröffentlichung festhält, müssen unterschiedlich aufbereitet werden.

Eingabe Bedeutung Aufbereitung
2025-03-09 Ein ziviles Datum: Jahr, Monat und Tag Direkt mit einem anderen gregorianischen Datum vergleichen
2025-03-09T05:00:00Z Ein Zeitstempel, der einen Zeitpunkt bezeichnet In ein Datum der gewählten Berichtszeitzone umwandeln
-05:00 Ein UTC-Offset Beschreibt den Unterschied der Ortszeit zu UTC zu einem bestimmten Zeitpunkt
America/New_York Eine benannte Zeitzone Liefert die Regeln zur Interpretation lokaler Daten und Offsetänderungen

Ein Offset und eine benannte Zeitzone enthalten unterschiedliche Informationen. Der einem Zeitstempel zugeordnete Offset beschreibt nicht den Offset an einem anderen Datum. Eine benannte Zeitzone liefert die Regeln für diesen Zusammenhang, einschließlich der Zeitumstellungen. Dieser Unterschied wird ausdrücklich in RFC 9557, „Date and Time on the Internet: Timestamps with Additional Information“ erläutert.

Legen Sie für eine Tabelle mit Veröffentlichungsdaten folgende Regel fest: Übernehmen Sie bereits als zivile Daten angegebene Werte unverändert; leiten Sie Daten aus Zeitstempeln mithilfe einer ausdrücklich gewählten Berichtszeitzone ab. Weisen Sie einem reinen Datum nicht willkürlich Mitternacht und einen Offset zu, nur um eine Subtraktion durchzuführen.

Kalenderstandards unterscheiden ebenfalls zwischen Daten und Datumsangaben mit Uhrzeit. Der iCalendar-Standard definiert einen separaten Wert DATE, der Kalenderkomponenten enthält. Seine serialisierte Form verwendet Ziffern ohne Trennzeichen; die Datumsangaben mit Bindestrichen in dieser Anleitung dienen der besseren Lesbarkeit. Siehe RFC 5545, Abschnitt 3.3.4.

Warum funktioniert es nicht, die verstrichenen Sekunden durch 86.400 zu teilen?

Eine Differenz zwischen zivilen Daten misst den Fortschritt im Kalender. Eine Differenz der verstrichenen Zeit misst das Intervall zwischen zwei Zeitpunkten. Bei einer Zeitumstellung müssen diese Größen nicht 24 Stunden pro Datumswechsel entsprechen. RFC 5545 weist ausdrücklich darauf hin, dass ein nominell tägliches Wiederholungsintervall bei einer Zeitverschiebung mehr oder weniger als 24 Stunden dauern kann. Siehe die Erläuterungen zu Wiederholungen.

Betrachten wir zwei fiktive Veröffentlichungsintervalle in America/New_York. Die folgenden Berechnungen verwenden an jedem Endpunkt die lokale Mitternacht. Die Offsets entsprechen den Regeln der New Yorker Zeitzone und ihren Umstellungen in IANA’s time zone database.

Fiktives Veröffentlichungsintervall Offset am Anfang Offset am Ende Verstrichene Stunden Differenz der zivilen Daten
9.–10. März 2025 -05:00 -04:00 23 1
2.–3. November 2025 -04:00 -05:00 25 1

Für das März-Intervall lauten die entsprechenden UTC-Zeitpunkte 2025-03-09T05:00:00Z und 2025-03-10T04:00:00Z: Der Abstand beträgt 23 Stunden. Teilt man dieses Intervall durch 24, erhält man ungefähr 0.9583. Für das November-Intervall ergibt dieselbe Berechnung ungefähr 1.0417. Keine der beiden Dezimalzahlen beantwortet die Kalenderfrage.

Runden kann den Fehler in diesen Beispielen verbergen, liefert aber keine zuverlässige Zählregel. Zwei Veröffentlichungen um 23:55 Uhr und 00:05 Uhr an aufeinanderfolgenden Daten liegen nur zehn Minuten auseinander und haben dennoch eine Differenz der zivilen Daten von eins. Extrahieren Sie zuerst die Daten und berechnen Sie dann ihre Differenz.

Wie zählt man Veröffentlichungsdaten in Numbers?

Verwenden Sie diese Methode, wenn die vorgesehenen Veröffentlichungsdaten bereits vorliegen. Apple beschreibt DAYS(end-date, start-date) als Funktion, die die Anzahl der Tage zwischen ihren Argumenten zurückgibt, einschließlich eines negativen Ergebnisses, wenn das Enddatum vor dem Anfangsdatum liegt. Siehe die Numbers-Referenz zu DAYS.

Öffnen Sie eine Numbers-Tabelle mit einer leeren Tabelle. Verwenden Sie Zeile 1 für beschreibende Bezeichnungen und geben Sie dann die folgenden Formeln einzeln in Zeile 2 ein. Um eine Formel einzugeben, wählen Sie ihre Zelle aus, geben Sie das führende = ein, vervollständigen Sie den Ausdruck und drücken Sie Return. Dies sind die von Apple dokumentierten Schritte zur Formeleingabe in Numbers auf dem Mac.

Zelle Vorgeschlagene Spaltenbezeichnung Einzugebende Formel Erwarteter Wert
A2 Früheres Veröffentlichungsdatum =DATE(2025,3,9) 9. März 2025
B2 Späteres Veröffentlichungsdatum =DATE(2025,3,10) 10. März 2025
C2 Abstand in zivilen Tagen =DAYS(B2,A2) 1

Mit DATE werden die Eingaben aus Jahr, Monat und Tag zusammengesetzt, statt sich darauf zu verlassen, wie eine mehrdeutige Textzeichenfolge interpretiert wird. Apple empfiehlt diese Funktion in seiner Liste der Datums- und Uhrzeitfunktionen, damit Daten unabhängig von den Einstellungen für das Datumsformat einheitlich interpretiert werden.

Wiederholen Sie die Prüfung in Zeile 3 mit =DATE(2025,11,2) in A3, =DATE(2025,11,3) in B3 und =DAYS(B3,A3) in C3. Die Antwort lautet erneut 1. Sie vergleichen die angegebenen Kalenderdaten, daher ist keine Anpassung aufgrund der verstrichenen Stunden erforderlich.

Für eine schnelle Berechnung ohne Hilfszellen geben Sie =DAYS(DATE(2025,3,10),DATE(2025,3,9)) in eine leere Zelle ein. Die Version mit getrennten Spalten lässt sich leichter überprüfen und für mehrere Veröffentlichungspaare wiederverwenden.

Möchten Sie den Abstand oder eine inklusive Datumszählung?

Bei der üblichen Differenz wird das Startdatum nicht als gezählte Einheit mitgerechnet. Zwischen dem 9. und 10. März liegt ein Tag. Wenn Ihre Aufgabe stattdessen fragt, wie viele Datumsangaben vom 9. bis einschließlich 10. März enthalten sind, lautet die Antwort zwei.

Für einen inklusiven Bereich, dessen Enddatum am oder nach dem Anfangsdatum liegt, verwenden Sie =DAYS(B2,A2)+1. Prüfen Sie die Reihenfolge, bevor Sie diese Formel anwenden. Eine negative Differenz ist ein nützlicher Hinweis darauf, dass die Einträge vertauscht sind; ein automatisch angewendeter Absolutwert würde diese Information verwerfen.

Dieselbe Unterscheidung gilt für einen Bereich mit nur einem Datum. Seine Datumsdifferenz beträgt null, während eine inklusive Zählung ein Datum umfasst. Entscheiden Sie, welches Ergebnis Ihre Tabelle benötigt, und benennen Sie die Ergebnisspalte entsprechend.

Was ist, wenn Ihre Eingaben Zeitstempel sind?

Ein Zeitstempel muss in die Berichtszeitzone umgewandelt werden, bevor die Uhrzeit verworfen wird. Zum Beispiel entspricht 2025-03-10T00:30:00Z dem 9. März um 20:30 Uhr in America/New_York, unter Verwendung des Offsets -04:00 dieses Datums. Wenn Sie die ersten zehn Zeichen des Zeitstempels übernehmen, erhalten Sie das UTC-Datum statt des Veröffentlichungsdatums in New York.

Die dokumentierte Signatur von Numbers DAYS akzeptiert zwei Datumsargumente; sie hat kein Argument für eine benannte Zeitzone. Verwenden Sie die Funktion, nachdem die vorgesehenen Daten festgelegt wurden. Für eine wiederholbare Zeitstempelberechnung auf einem Mac stellt Foundation die erforderlichen Kalender-APIs bereit.

Trotz seines Namens stellt Foundation’s Date einen Zeitpunkt unabhängig von einem Kalender oder einer Zeitzone dar. Apple empfiehlt, Kalenderberechnungen über Calendar vorzunehmen. Siehe die offizielle Dokumentation zu Date.

Bei gewöhnlichen Zeitumstellungen besteht die Abfolge in Foundation aus folgenden Schritten: Wählen Sie den gregorianischen Kalender und die Berichtszeitzone, ermitteln Sie den Beginn des lokalen Tages für jeden Endpunkt und fordern Sie dann die Differenz nur anhand der Tageskomponente an. Apple dokumentiert sowohl startOfDay(for:) als auch dateComponents(_:from:to:).

Ein vollständiges Foundation-Beispiel im Terminal ausführen

Für diese optionale Methode ist eine installierte Swift-Toolchain erforderlich. Öffnen Sie das Terminal und führen Sie swift --version aus, um dies zu prüfen, wie im Getting Started Guide von Swift beschrieben. Falls nötig, dokumentiert Apple die Installation der Befehlszeilenwerkzeuge mit xcode-select --install; schließen Sie den Installationsdialog ab, bevor Sie fortfahren. Siehe Installing the command-line tools.

Fügen Sie den gesamten folgenden Block in das Terminal ein. Er enthält ein vollständiges Programm und fiktive Eingabedaten. Es analysiert Zeitstempel mit expliziten Offsets und ohne Nachkommastellen. Apple dokumentiert .withInternetDateTime für dieses Zeitstempelformat in der ISO8601DateFormatter-Referenz zu den Optionen.

swift - <<'SWIFT'
import Foundation

let zoneID = "America/New_York"
guard let zone = TimeZone(identifier: zoneID) else {
    fatalError("Unknown reporting zone: \(zoneID)")
}

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = zone

let parser = ISO8601DateFormatter()
parser.formatOptions = [.withInternetDateTime]

let samples = [
    ("Spring", "2025-03-09T00:00:00-05:00",
               "2025-03-10T00:00:00-04:00"),
    ("Autumn", "2025-11-02T00:00:00-04:00",
               "2025-11-03T00:00:00-05:00")
]

for (label, startText, endText) in samples {
    guard let start = parser.date(from: startText),
          let end = parser.date(from: endText) else {
        fatalError("Could not parse timestamps for \(label)")
    }

    let startDay = calendar.startOfDay(for: start)
    let endDay = calendar.startOfDay(for: end)
    guard let days = calendar.dateComponents(
        [.day], from: startDay, to: endDay
    ).day else {
        fatalError("Could not calculate civil days for \(label)")
    }

    let hours = end.timeIntervalSince(start) / 3600
    print("\(label): \(days) civil day(s), \(hours) elapsed hours")
}
SWIFT

Die erwartete Ausgabe folgt. Die numerischen Beispiele wurden unabhängig durch Datumsarithmetik überprüft; das Swift-Programm wurde geprüft, aber hier nicht unter macOS ausgeführt.

Frühjahr: 1 ziviler Tag, 23,0 verstrichene Stunden
Herbst: 1 ziviler Tag, 25,0 verstrichene Stunden

Um das Programm anzupassen, ersetzen Sie die Zeitstempelzeichenfolgen und wählen Sie die Berichtszeitzone bewusst aus. Die Offsets der Zeitstempel geben ihre Zeitpunkte an; die Zeitzone des Kalenders bestimmt, auf welche lokalen Daten diese Zeitpunkte fallen. Das Programm wird angehalten, wenn der Parser einen Fehler meldet, statt das aktuelle Datum einzusetzen oder einen Eintrag zu überspringen.

Das Beispiel akzeptiert das angegebene Format mit Offset. Für Nachkommastellen sind andere Parseroptionen erforderlich. Außerdem unterstützt es keine in Klammern stehenden Zeitzonenannotationen nach RFC 9557: Geben Sie die benannte Zeitzone wie gezeigt separat an, statt davon auszugehen, dass diese Annotationen von dieser Parserkonfiguration unterstützt werden.

Was sollten Sie prüfen, wenn das Ergebnis falsch aussieht?

Gehen Sie diese Prüfungen der Reihe nach durch; jede betrifft eine andere mögliche Ursache für abweichende Ergebnisse.

  1. Prüfen Sie, welche Zählung verlangt wird. Eine Datumsdifferenz und eine inklusive Datumszählung unterscheiden sich bei einem vorwärts gerichteten Bereich um eins.
  2. Prüfen Sie die Eingaben. Verwenden Sie für Veröffentlichungen mit reinen Datumsangaben die tatsächlichen Werte für Jahr, Monat und Tag. Nehmen Sie nicht an, dass importierte Zeitstempel bereits die vorgesehenen lokalen Daten darstellen.
  3. Prüfen Sie die Berichtszeitzone. Wandeln Sie beide Zeitpunkte in dieselbe gewählte Zeitzone um, bevor Sie die Daten extrahieren.
  4. Prüfen Sie die Berechnung. Zählen Sie die Kalendertage, nachdem der Einfluss der Uhrzeit entfernt wurde. Das Teilen eines Zeitintervalls durch 86,400 beantwortet eine Frage zur verstrichenen Dauer.
  5. Prüfen Sie die Richtung. Behalten Sie ein negatives Ergebnis bei, bis Sie festgestellt haben, ob die früheren und späteren Einträge vertauscht wurden.

Verwenden Sie für Kalendercode die API für den Tagesbeginn, statt davon auszugehen, dass jeder lokale Tag mit einer eindeutigen Mitternacht beginnt. Apple dokumentiert, dass startOfDay(for:) die erste Mitternacht auswählt, wenn es zwei gibt, oder den ersten existierenden Zeitpunkt, wenn keine Mitternacht vorhanden ist. So wird ein Sonderfall an der Grenze behandelt, den das manuelle Setzen der Stunde auf null übersehen kann. Siehe startOfDay(for:).

Das Foundation-Beispiel behandelt gewöhnliche Zeitumstellungen. Bei historischen Änderungen, durch die ein ganzer lokaler Kalendertag übersprungen wurde, müssen Sie zuerst festlegen, ob die Aufgabe gregorianische Datumsangaben oder tatsächlich existierende lokale Tage zählt; das sind unterschiedliche Anforderungen. Wenn Erstere gemeint sind, übernehmen Sie reine Datumsangaben als Kalenderangaben.

Halten Sie die abschließende Berechnung für eine Tabelle mit Veröffentlichungsdaten einfach: Legen Sie die beiden vorgesehenen gregorianischen Daten fest, behalten Sie ihre Reihenfolge bei und verwenden Sie DAYS, um den Abstand zu ermitteln. Wenn die Eingaben Zeitpunkte sind, legen Sie vor der Berechnung die Berichtszeitzone ausdrücklich fest. So bleibt das Ergebnis an die Veröffentlichungsdaten gebunden, auch wenn sich die Uhr zwischen ihnen ändert.

Quellen