subtract dates with time module

B

barronmo

I'm trying to get the difference in dates using the time module rather
than datetime because I need to use strptime() to convert a date and
then find out how many weeks and days until that date. I'm a beginner
so any help would be appreciated. Here is the code:

def OBweeks(ptID):
qry = 'SELECT short_des FROM problems WHERE patient_ID = %s;' %
(ptID)
results = EMR_utilities.getAllData(qry)
for items in results:
r = re.search('\d\d\d\d-\d\d-\d\d', items)
if r:
d = time.strptime(r.group(), "%Y-%m-%d') -
time.localtime()
weeks, days = divmod(d.days, 7)
return '%s %s/7 weeks' % (weeks, days)

This isn't working. I'm getting "unsupported operand type for -:
'time.struct_time' and 'time.struct_time" error.

Thanks, Mike
 
D

Diez B. Roggisch

barronmo said:
I'm trying to get the difference in dates using the time module rather
than datetime because I need to use strptime() to convert a date and
then find out how many weeks and days until that date. I'm a beginner
so any help would be appreciated. Here is the code:

Use strptime to create time-tuples, and use the fields in there to create
datetime-objects. Then do the math with them.

Diez
 
J

John Machin

barronmo said:
I'm trying to get the difference in dates using the time module rather
than datetime because I need to use strptime() to convert a date and
then find out how many weeks and days until that date.

datetime.datetime.strptime was introduced in Python 2.5; what version
are you using?

If you really want to get to datetime, here's a quick bridge:.... return datetime.datetime(*time.strptime(astr, format)[:6])
....datetime.datetime(2008, 3, 31, 0, 0)

I'm a beginner
so any help would be appreciated. Here is the code:

def OBweeks(ptID):
qry = 'SELECT short_des FROM problems WHERE patient_ID = %s;' %
(ptID)
results = EMR_utilities.getAllData(qry)
for items in results:
r = re.search('\d\d\d\d-\d\d-\d\d', items)
if r:
d = time.strptime(r.group(), "%Y-%m-%d') -

You have " at the start and ' at the end of what's supposed to be a
string constant. That's a syntax error; it won't run. Please don't serve
up what you thought you might have run -- use copy/paste.

In this particular case, you can just use time.mktime to convert a time
tuple into days since the epoch.

# untested
days = time.mktime(time.strptime(r.group(), "%Y-%m-%d")) -
int(time.mktime(time.localtime()))
weeks, days = divmod(days, 7)
time.localtime()
weeks, days = divmod(d.days, 7)
return '%s %s/7 weeks' % (weeks, days)

This isn't working. I'm getting "unsupported operand type for -:
'time.struct_time' and 'time.struct_time" error.

It *is* working. That is the correct result of the code that you
executed. There is is nothing in the time docs to suggest that
attempting to subtract time tuples produces anything useful.

HTH,
John
 
B

barronmo

Thanks for the help everyone. I ended up with the following:

def OBweeks(ptID):
qry = 'SELECT short_des FROM problems WHERE patient_ID = %s;' %
(ptID)
results = EMR_utilities.getAllData(qry)
for items in results:
r = re.search('\d\d\d\d-\d\d-\d\d', str(items))
if r:
edc = datetime.date(*map(int, r.group().split('-')))
pregnancy = datetime.timedelta(weeks=-40)
conception = edc + pregnancy
howfar = datetime.date.today() - conception
weeks, days = divmod(howfar.days, 7)
return '%s %s/7 weeks' % (weeks, days)
else: pass

Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,992
Messages
2,570,220
Members
46,807
Latest member
ryef

Latest Threads

Top