2017-09-25 4 views
1

Ich verstehe, wenn Sie zwei Strings über bestimmte Operatoren wie ==,! =,>, <, etc .. Python verwendet die ASCII-Werte der Zeichenfolgen unter der Haube.Vergleichen von Strings in Python, die Daten enthalten

Meine Frage ist, ist es sicher, die ASCII-Werte der Daten, anstatt Umwandeln des Objekts in eine Datetime-Objekt in Python zu vergleichen?

Zum Beispiel u'2017-01-01' > u'2016-12-01' = True

Antwort

0

In diesem bestimmten Format ja. Allgemeiner ist jedes Format sicher, in dem größere Einheiten zuerst erscheinen (z. B. Jahre vor Monaten) und in denen Zahlen immer die gleiche Länge haben, indem sie mit Nullen auf der linken Seite gefüllt werden.

+0

Vielen Dank. So wäre es sicher, etwas wie dieses zu vergleichen: '2016-08-24 23:04:50'> = '2017-01-01'? Was sollte zu falsch ausgewertet werden. –

+0

@CodyFlynn nein sollten sie das gleiche Format sein. Zum Beispiel ''2017-01-01 00:00:00' <= '2017-01-01'' ist' False', was für mich keinen Sinn ergibt. –

2

mit 2016-12-01 (Jahr + mit Nullen aufgefüllt Monat + Null-gepolstert Tag), die Sie ausgewählt haben ein Format, in dem die lexikographische Reihenfolge der chronologischen Reihenfolge entspricht.

Die wichtigsten Daten zuerst (das Jahr), dann der Monat und der Tag. Es ist nicht möglich, dass ein früherer Zeitpunkt wegen dieser Eigenschaft nach dem anderen kommt (die Null-Polsterung ist sehr wichtig hier)

So in diesem Fall zu vergleichen lexikografisch sicher ist.

0

Sie können einige knifflige Wege, zum Beispiel verwenden:

date1 = u'2017-01-01' 
date2 = u'2016-12-01' 

int(date1.replace('-','')) > int(date2.replace('-','')) 

HINWEIS

SIE Richtlinie %d für Tag des Monats als Nullen aufgefüllt Dezimalzahl verwenden. und %m für Monat als eine Null gefüllte Dezimalzahl.