Comment convertir un datetime.datetime python pour exceler le numéro de série
J'ai besoin de convertir des dates dans Excel numéros de série pour les données munging script que je suis en train d'écrire. En jouant avec les dates dans mon OpenOffice classeur Calc, j'ai été en mesure de déduire que '1-Jan 1899 00:00:00' cartes pour le nombre zéro.
J'ai écrit la fonction suivante pour convertir à partir d'un python objet datetime dans un Excel numéro de série:
def excel_date(date1):
temp=dt.datetime.strptime('18990101', '%Y%m%d')
delta=date1-temp
total_seconds = delta.days * 86400 + delta.seconds
return total_seconds
Cependant, lorsque je tente quelques exemples de dates, les chiffres sont différents de ceux que je reçois quand je format de la date que d'un certain nombre dans Excel (bien OpenOffice Calc). Par exemple, le test '2009-03-20' donne 3478032000 en Python, alors que excel rend le numéro de série de 39892.
Quel est le problème avec la formule ci-dessus?
*Note: j'utilise Python 2.6.3, donc n'ont pas accès à l'datetime.total_seconds()
source d'informationauteur Homunculus Reticulli
Vous devez vous connecter pour publier un commentaire.
Il semble que le Excel "de série de la date format" est en fait le nombre de jours depuis 1900-01-00, avec une fraction de la composante qui est une fraction d'une journée, basé sur http://www.cpearson.com/excel/datetime.htm. (Je suppose que la date qui doit être considéré comme 1899-12-31, car il n'y a pas une telle chose comme un 0e jour d'un mois)
Donc, il semble que ce devrait être:
Alors que ce n'est pas exactement pertinentes à l'excel de série de format de date, c'était le top hit pour l'exportation de python de date et heure dans Excel. Ce que j'ai trouvé particulièrement utile et simple qui est juste à l'exportation à l'aide de strftime.
Ce sera de sortie dans le format suivant '06/25/14 09:59:29', qui est accepté par Excel comme une date/heure valide et permet le tri dans Excel.
si le problème est que nous voulons DATEVAL() d'excel numéro de série pour les dates, le toordinal() la fonction peut être utilisée. Python numéros de série commencent à partir Jan1 de l'année 1 alors que excel démarre à partir du 1er janvier 1900 donc appliquer un décalage. Voir aussi excel 1900 année bissextile bug (https://support.microsoft.com/en-us/help/214326/excel-incorrectly-assumes-that-the-year-1900-is-a-leap-year)