Python "datetime" datatyp...
Python "datetime" datatyp...
Jag har ett litet Python problem som jag inte får ordning på...
Jag har ett datum i en variabel av typen "tuple"
Om jag gör print på det så ser det ut så här "(2008, 5, 13, 17, 10, 2, 923, 0, 0)"
Jag vill ha det som en variabel av typen "datetime", vilket väl så vitt
jag förstår ska se ungefär likadant ut.
Problemet är att de olika date/time metoderna inte fungerar mot en "tuple",
det måste (så vitt jag förstår) vara ett riktigt datetime objekt...
Jag antar att man skulle kunna använda "replace" och plocka ut varje
fält ur tuple'n för hand, så att säga. D.v.s:
Om A är en datetime och B en tuple så verkar det som om man kan göra :
A = A.replace(year=B[0], month=B[1].....second=B[5])
Det verkar ersätta varje del av A med motsvarande värde från B.
Går det enklare ?
Jag har ett datum i en variabel av typen "tuple"
Om jag gör print på det så ser det ut så här "(2008, 5, 13, 17, 10, 2, 923, 0, 0)"
Jag vill ha det som en variabel av typen "datetime", vilket väl så vitt
jag förstår ska se ungefär likadant ut.
Problemet är att de olika date/time metoderna inte fungerar mot en "tuple",
det måste (så vitt jag förstår) vara ett riktigt datetime objekt...
Jag antar att man skulle kunna använda "replace" och plocka ut varje
fält ur tuple'n för hand, så att säga. D.v.s:
Om A är en datetime och B en tuple så verkar det som om man kan göra :
A = A.replace(year=B[0], month=B[1].....second=B[5])
Det verkar ersätta varje del av A med motsvarande värde från B.
Går det enklare ?
Hejsan, om vi kallar din tuple för
_timetuple = (2008, 5, 13, 17, 10, 2, 923, 0, 0)
så gäller att datetime vill ha de 7 första elementen (år, månad, dag, timme, minut, sekund, mikrosekund).
för enkelhetens skull skapar jag en ny
timetuple = _timetuple[:7]
Python har sedan en operator för att "packa upp" element ur en lista/tuple för att skicka dem som argument : *item
d = datetime.datetime(*timetuple)
_timetuple = (2008, 5, 13, 17, 10, 2, 923, 0, 0)
så gäller att datetime vill ha de 7 första elementen (år, månad, dag, timme, minut, sekund, mikrosekund).
för enkelhetens skull skapar jag en ny
timetuple = _timetuple[:7]
Python har sedan en operator för att "packa upp" element ur en lista/tuple för att skicka dem som argument : *item
d = datetime.datetime(*timetuple)
Testat...
Problemet är att den "tuple" jag har har 9 element :
(2008, 5, 19, 22, 58, 0, 540, 0, 0)
en datetime vill tydligen ha 8 :
TypeError: function takes at most 8 arguments (9 given)
Aja, jag har en rutin som fungerar där jag använder :
fd = fd.replace(tt[0], tt[1], tt[2], tt[3], tt[4], tt[5])
vilket duger för tillfället...
EDIT !!
Glömde din "[:7]" operation...
Med det med "i bilden" så fungerar det !
Problemet är att den "tuple" jag har har 9 element :
(2008, 5, 19, 22, 58, 0, 540, 0, 0)
en datetime vill tydligen ha 8 :
TypeError: function takes at most 8 arguments (9 given)
Aja, jag har en rutin som fungerar där jag använder :
fd = fd.replace(tt[0], tt[1], tt[2], tt[3], tt[4], tt[5])
vilket duger för tillfället...
EDIT !!
Glömde din "[:7]" operation...
Med det med "i bilden" så fungerar det !

Kommer din tuple från time.localtime() (eller motsvarande)? Isåfall kan du slippa krånglet genom att först konvertera den till Unix-tid, och sen låta datetime tugga på den:
Kod: Markera allt
>>> import time
>>> foo = (2008, 5, 13, 17, 10, 2, 923, 0, 0)
>>> foo_unix = time.mktime(foo)
>>> datetime_obj.fromtimestamp(foo_unix)
datetime.datetime(2008, 5, 13, 18, 10, 2)
Det jag mest undrade över är om den tupeln du har är i samma format som den tupel du får av time.localtime(). Om den är det så är det bara skyffla om den till Unix-tid som jag skrev, och sen in i datetime-klassen.
Men det ramverk du använder har bergis funktioner för att hantera sånt utan att blanda in time-modulen.
Men det ramverk du använder har bergis funktioner för att hantera sånt utan att blanda in time-modulen.