Die Implementierung der Berechnung der Anzahl der Tage zwischen 2 Daten

8

Wie berechnet man am effizientesten die Anzahl der Tage zwischen zwei Daten? Im Grunde frage ich, wie unsere favorisierten Datetime-Bibliotheken implementiert sind.

Ich habe schnell eine Lösung implementiert, die ~ 0 (n) ist, wenn ich 1 Iteration pro 4 Jahre durchlaufe. (Code unten angehängt)

Ich wurde von einem Intro gebeten, Probleme mit Computern zu lösen, um das zu implementieren, aber sie wiederholen einfach jeden Tag anstatt alle vier Jahre ... also bin ich nicht zufrieden mit dieser Lösung und kam mit dem darunter. Ist jedoch eine effizientere Lösung verfügbar? Wenn ja, wie schaffen sie das?

%Vor%     
Pwnna 12.10.2012, 15:20
quelle

7 Antworten

20

Sie können ein Datum in eine Julianische Tageszahl in O (1) umwandeln.

Subtrahiere die zwei julianischen Tageszahlen.

    
Doug Currie 12.10.2012, 15:31
quelle
8

Tyler Durdens Lösung ist sehr elegant, aber könnte eine Erklärung brauchen.

Die Schönheit des Algorithmus ist die Aussage:

%Vor%

Gibt die Anzahl der Tage zwischen dem 1. März und dem Anfang des 'm'th Monats nach März zurück. (Wenn Sie es beweisen wollen, denken Sie daran, 'Ganzzahldivision' zu verwenden, die Dezimalteile abschneidet)

Um Standard-Dativkonventionen für Schuhlöffel in diese Funktion zu integrieren, werden die Eingabewerte für Monat und Jahr so ​​verschoben, dass der Kalender im März anstatt im Januar beginnt.

%Vor%

Bei der Implementierung wird das Problem der Berechnung von "Tagen pro Monat" behandelt und es werden nur "Tage pro Jahr" berechnet. Wikipedia liefert eine ausreichende Erklärung für diesen Teil.

Ссылка

    
LanchPad 17.04.2014 15:08
quelle
7

Alle Division ist eine Ganzzahl-Division, Operator% ist der Modul.

Vorgegebene Ganzzahl y, m, d, berechnen Tag Nummer g als:

%Vor%     
Tyler Durden 12.10.2012 16:23
quelle
4

Die Lösung ist in Python, und es sollte nicht schwierig sein, sie in eine andere Sprache zu konvertieren.

%Vor%     
kiran raj 16.05.2013 09:41
quelle
2

Ich habe diese Formel auf Vorschlag von Doug Currie geschrieben. Ich teste es bis 2147483647 Tage zurück von heute.

%Vor%     
Satbir 13.10.2013 11:30
quelle
-1

Vielleicht könnte das helfen: (Dieses Programm wurde in c geschrieben)

%Vor%

}

    
TheGuy 27.06.2016 07:51
quelle
-1

Einfacher Algorithmus mit Python:

%Vor%     
Muhammad Elsayeh 04.02.2018 15:44
quelle

Tags und Links