hallo
Falls da schon ein Date_time_string (beinahe ) im
ISO-Format vorliegt, kannst du pragmatisch Calc die Umrechnung überlassen:
Code: Alles auswählen
stamp = "2024-07-21T17:02:47Z"
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.Sheets[0]
sheet[0,0].FormulaLocal = stamp.replace("T"," ")[:-1]
mit …FormulaLocal übernimmt Calc auch gleich implizit die Formatierung.
mit …Formula würde zunächst als Fliesskomma formatiert werden.
______________________
Deine Umrechnung passt anfangs schon, aber spätestens bei dem krummen Wert für die LO-epoche, und bei der Übergabe der Sekunden in die float-berechnung machst du Unsinn, da müsste ja jeder Tag aus 100000Sekunden bestehen und die Sekundenanzahl auch ggf fünf-stellig mit führenden Nullen dargestellt werden.
Eine
richtige Umrechnung sieht etwa so aus:
Code: Alles auswählen
from datetime import datetime as dt , timedelta
stamp = "2024-07-21T17:02:47Z"
py_date = dt.strptime(stamp ,'%Y-%m-%dT%H:%M:%SZ')
lo_epoch = dt(1899,12,30)
delta = py_date - lo_epoch
lo_date = delta.days + delta.seconds/86400 # 24*60*60 Sekunden/Tag
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.Sheets[0]
sheet[2,0].Value = lo_date
_________
Die umgekehrte Berechnung eines DateTime-objekts aus einem Calc-datum wäre:
Code: Alles auswählen
lo_date = sheet[2,0].Value
date, frac = divmod(lo_date, 1)
ordinal = int(lo_epoch.toordinal() + date)
py_date = dt.fromordinal(ordinal) + timedelta(seconds= frac*86400)
print(py_date)