Mam pewne problemy z formatem z ciągu do int w Pythonie:

obj=self.browse(cr,uid,ids,context=context)[0]
hour_den=obj.time_in[12:13]
hour_di=obj.time_out[12:13]
min_den=obj.time_in[15:16]
min_di=obj.time_out[15:16]
gl=hour_di-hour_den
pl=min_di-min_den

I błąd jest:

 unsupported operand type(s) for -: 'unicode' and 'unicode'

Jak mogę to sformatować? Pomóż mi proszę! Dzięki!!!

2
Thong Tran 13 grudzień 2011, 23:13

4 odpowiedzi

Najlepsza odpowiedź

Wykorzystaj strptime z DateTime:

from datetime import datetime
hour_den = '12:13'
hour_di = '12:15'
FMT = '%H:%M'
timedelta = datetime.strptime(hour_di, FMT) - datetime.strptime(hour_den, FMT)
print timedelta
0
RobB 13 grudzień 2011, 19:49

Nie jest jasny, jaki jest typ OBJ. Jednak możesz to zrobić.

obj=self.browse(cr,uid,ids,context=context)[0]
hour_den = hour_di = min_den = min_di = 0
try:
  hour_den=int(obj.time_in[12:13])
  hour_di=int(obj.time_out[12:13])
  min_den=int(obj.time_in[15:16])
  min_di=int(obj.time_out[15:16])
except ValueError:
  return False
gl=hour_di-hour_den
pl=min_di-min_den

Ale lepiej odlewać do int w oddzielnej funkcji

Podejrzewam, że indeksy są nieprawidłowe. Jeśli potrzebujesz ręcznie analizować datę w stałym formacie, jak "2011-12-14 02:20:11". Możesz użyć:

ts = "2011-12-14 02:20:11"
date, time = ts.split()
hours, mins, secs = time.split(':')
try:
  hours=int(hours)
  mins=int(mins)
  secs=int(secs)
except ValueError:
  return False
1
ILYA Khlopotov 13 grudzień 2011, 19:42

Jeśli są to liczby całkowite, możesz użyć "int", aby przekonwertować na liczbę całkowitą. Na przykład:

hour_den=int(obj.time_in[12:13])
0
stew 13 grudzień 2011, 19:16
gl = int(hour_di) - int(hour_den)
pl = int(min_dl) - int(min_den)
0
Scott Hunter 13 grudzień 2011, 19:16