Commit 3197d275 authored by Lennart Regebro's avatar Lennart Regebro

Fix for collector issue #411. DateTime.rfc822() is not rfc2822 compliant.

parent 42ea9a15
......@@ -12,13 +12,12 @@
##############################################################################
"""Encapsulation of date/time values"""
__version__='$Revision: 1.79 $'[11:-2]
__version__='$Revision: 1.80 $'[11:-2]
import re,sys, os, math, DateTimeZone
from time import time, gmtime, localtime, asctime
from time import timezone, strftime
from time import daylight, timezone, altzone
from time import daylight, timezone, altzone, strftime
from types import InstanceType,IntType,FloatType,StringType,UnicodeType
try: from time import tzname
except: tzname=('UNKNOWN','UNKNOWN')
......@@ -400,6 +399,9 @@ def safelocaltime(t):
rval = localtime(t_int)
return rval
def _tzoffset2rfc822zone(seconds):
return "%+03d%02d" % divmod( (-seconds/60), 60)
class DateTime:
"""DateTime objects represent instants in time and provide
......@@ -1435,9 +1437,16 @@ class DateTime:
def rfc822(self):
"""Return the date in RFC 822 format"""
if self._tz == self._localzone0: #Use local standard time
tzoffset = _tzoffset2rfc822zone(localzone)
elif self._tz == self._localzone1: # Use local daylight saving time
tzoffset = _tzoffset2rfc822zone(altzone)
else:
tzoffset = '-0000' # unknown time zone offset
return '%s, %2.2d %s %d %2.2d:%2.2d:%2.2d %s' % (
self._aday,self._day,self._amon,self._year,
self._hour,self._minute,self._nearsec,self._tz)
self._hour,self._minute,self._nearsec,tzoffset)
# New formats
......
# To run these tests, use:
# python unittest.py DateTime.tests.suite
......@@ -5,9 +6,7 @@ import unittest
from DateTime import DateTime
import string
import math
import os
__basedir__ = os.getcwd()
import time
class DateTimeTests (unittest.TestCase):
......@@ -94,7 +93,7 @@ class DateTimeTests (unittest.TestCase):
# Compare representations as it's the
# only way to compare the dates to the same accuracy
self.assertEqual(repr(dt),repr(dt1))
def testDayOfWeek(self):
'''strftime() used to always be passed a day of week of 0.'''
dt = DateTime('2000/6/16')
......@@ -218,27 +217,32 @@ class DateTimeTests (unittest.TestCase):
isoDt = DateTime('2002-05-02T08:00:00Z-04:00')
self.assertEqual( ref1, isoDt)
def testJulianWeek(self):
""" check JulianDayWeek function """
try:
import gzip
except ImportError:
print "Warning: testJulianWeek disabled: module gzip not found"
return 0
lines = gzip.GzipFile(os.path.join(__basedir__,
'julian_testdata.txt.gz')).readlines()
for line in lines:
d = DateTime(line[:10])
result_from_mx=tuple(map(int, line[12:-2].split(',')))
self.assertEqual(result_from_mx[1], d.week())
def testRFC822(self):
'''rfc822 conversion'''
isDST = time.localtime(time.time())[8]
if isDST:
offset = time.altzone
else:
offset = time.timezone
rfc822zone = "%+03d%02d" % divmod( (-offset/60), 60)
wrongzone = "%+03d:%02d" % divmod( (60-offset/60), 60) #one hour off, ISO format
# Create a local DateTime and test
dt = DateTime(2002, 5, 2, 8, 0, 0)
self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00' + ' ' + rfc822zone)
# Create a non-local date time and test
dt = DateTime('2002-05-02T08:00:00Z'+wrongzone)
self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 -0000')
#print dt.rfc822()
def test_suite():
return unittest.makeSuite(DateTimeTests)
if __name__=="__main__":
unittest.TextTestRunner().run(test_suite())
unittest.TextTestRunner().run(test_suite())
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment