Frage

In meiner MySQL-Datenbank habe ich Tage, bis Mitte der 1700er zurück, die ich irgendwie Ints in einem Format ähnlich der Unix-Zeit zu konvertieren. Der Wert des int ist nicht wichtig, so lange, wie ich entweder aus meiner Datenbank ein Datum nehmen oder von Benutzereingaben und die gleiche int erzeugen. Ich brauche MySQL zu verwenden, um die int auf der Datenbankseite zu erzeugen, und Python das Datum vom Benutzer zu machen.

Normalerweise wird der UNIX_TIMESTAMP Funktion , würde dies in MySQL erreichen, aber für Termine vor 1970, es gibt immer null.

Die TO_DAYS MySQL-Funktion könnte auch funktionieren, aber ich kann nicht ein Datum aus Benutzereingaben nehmen und Python verwenden die gleichen Werte zu schaffen, da diese Funktion in MySQL erstellt.

Also im Grunde, ich brauche eine Funktion wie UNIX_TIMESTAMP, das funktioniert in MySQL und Python für Termine zwischen 1700.01.01 und 2100.01.01.

Anders ausgedrückt, diese MySQL Pseudo-Code:

select 1700_UNIX_TIME(date) from table;

muss diesen Python-Code gleich:

1700_UNIX_TIME(date)
War es hilfreich?

Lösung

Ich habe hier nicht installiert MySQL, aber wenn ich hier: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days - ich sehe ein Beispiel TO_DAYS('2008-10-07') Rückkehr 733.687.

Die folgende Python-Funktion kehrt datetime(2008,10,7).toordinal() = 733.322, was 365 weniger ist als die Ausgabe des MySQL.

diese So nehmen:

from datetime import datetime

query = '2008-10-07'
nbOfDays = datetime.strptime(query, '%Y-%m-%d').toordinal() + 365

und es soll zwischen 1700 und 2100 für Daten arbeiten.

Andere Tipps

Nach dem Link, den Sie gab,

Given a date date, returns a day number (the number of days since year 0).

mysql> SELECT TO_DAYS(950501);
        -> 728779
mysql> SELECT TO_DAYS('2007-10-07');
        -> 733321

Entsprechende Zahlen in Python:

>>> import datetime
>>> datetime.date(1995,5,1).toordinal()
728414
>>> datetime.date(2007,10,7).toordinal()
732956

So ist die Beziehung: mySQL_int == Python_int + 365 und Sie können mithilfe der fromordinal Klassenmethode in der anderen Richtung konvertieren:

>>> datetime.date.fromordinal(728779 - 365)
datetime.date(1995, 5, 1)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top