hi there
i handled this problem by writing the following 2
functions:
def tmCheckDate(self, p_datestring,
p_separator='/'):
"""This functions takes a string that
reprezents a date like 'dd/mm/yyyy' and tests is a valide
date."""
l_isDate = 1
l_daysInMonth
= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
l_dateparts = p_datestring.split(p_separator)
if
len(l_dateparts) != 3:
l_isDate =
0
else:
l_intYear = l_dateparts[2]
l_intMonth = l_dateparts[1]
l_intDay = l_dateparts[0]
try:
l_intYear = int(l_intYear,
10)
l_intMonth = int(l_intMonth,
10)
l_intDay = int(l_intDay, 10)
except:
l_isDate = 0
else:
if
(l_intYear <=
50):
l_intYear +=
2000
if
(l_intYear >= 51 and l_intYear <
100):
l_intYear +=
1900
if
((l_intMonth==0) or (l_intMonth > 12) or (l_intDay == 0) or (l_intYear >
9999)):
l_isDate =
0
else:
if (l_intMonth == 2):
#february
if
calendar.isleap(l_intYear):
l_nDays =
29
else:
l_nDays =
28
else:
l_nDays =
l_daysInMonth[l_intMonth-1]
if (l_intDay >
l_nDays):
l_isDate = 0
return l_isDate
def tmConvertStringToDateTimeObj(self, p_datestring,
p_separator='/'):
"""Takes a string that represents a date
like 'dd/mm/yyyy' and returns a DateTime object"""
try:
l_dateparts =
p_datestring.split(p_separator)
l_intYear = int(l_dateparts[2],
10)
l_intMonth =
int(l_dateparts[1], 10)
l_intDay =
int(l_dateparts[0], 10)
return
DateTime('%s/%s/%s 00:00:00' % (l_intYear, l_intMonth,
l_intDay))
except:
return None
i used the tmCheckDate function to validate strings like 'dd/mm/yyyy' that
comes from a form or whatever,
and after that tmConvertStringToDateTimeObj to
get the DateTime object.
you can modify the functions to work with 'YYYY/MM/DD' strings.
hope this will help
dragos
----- Original Message -----
Sent: Monday, November 24, 2003 4:37
PM
Subject: [Zope] date formats
Hi all !
… can’t get rid off my dates
problems ….
I would like the following python
statements to apply validity checks on a date always inputed under
format YYYY / MM / DD
(GMT+1)
The 2 first examples behaves as
expected.
The last one not.
try:
date=DateTime('2003/07/03')
print date.strftime("%Y %B
%d")
except:
print
'error'
return printed 2003 July 03 (OK)
try:
date=DateTime('2003/03/07')
print date.strftime("%Y %B
%d")
except:
print
'error'
return
printed
2003 March 07 (OK)
try:
date=DateTime('2003/13/03')
print
date.strftime("%Y %B %d")
except:
print
'error'
return printed 2003 March 13 (NOK)
While I’m expecting an error (no
months with id 13 !!!) it reverses the month part and the day part
!!
Why ??
Is that the normal behaviour
??
Or is there any parameter to
provide so that python knows the format is always YYYY / MM /
DD
(the
setup: Windows 2000
server
Zope 2.6.2 python 2.1 )
Thanks for any help
!
Phil.
_______________________________________________
Zope maillist
-
Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**
No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev
)