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 -----
From: Philippe Vignaux
To: zope@zope.org
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 )