Index: third_party/logilab/common/date.py |
diff --git a/third_party/logilab/common/date.py b/third_party/logilab/common/date.py |
index 544d03ecffbcd00ba61c670b25a2711dca84c61d..b069a6fdcc24ba7a7b779e80d7ffaeb0a1e3223c 100644 |
--- a/third_party/logilab/common/date.py |
+++ b/third_party/logilab/common/date.py |
@@ -1,4 +1,4 @@ |
-# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
+# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
# |
# This file is part of logilab-common. |
@@ -22,14 +22,11 @@ __docformat__ = "restructuredtext en" |
import math |
import re |
-import sys |
-from locale import getlocale, LC_TIME |
+from locale import getpreferredencoding |
from datetime import date, time, datetime, timedelta |
from time import strptime as time_strptime |
from calendar import monthrange, timegm |
-from six.moves import range |
- |
try: |
from mx.DateTime import RelativeDateTime, Date, DateTimeType |
except ImportError: |
@@ -133,7 +130,7 @@ def get_national_holidays(begin, end): |
end = datefactory(end.year, end.month, end.day, end) |
holidays = [str2date(datestr, begin) |
for datestr in FRENCH_MOBILE_HOLIDAYS.values()] |
- for year in range(begin.year, end.year+1): |
+ for year in xrange(begin.year, end.year+1): |
for datestr in FRENCH_FIXED_HOLIDAYS.values(): |
date = str2date(datestr % year, begin) |
if date not in holidays: |
@@ -190,8 +187,8 @@ def date_range(begin, end, incday=None, incmonth=None): |
end = todate(end) |
if incmonth: |
while begin < end: |
- yield begin |
begin = next_month(begin, incmonth) |
+ yield begin |
else: |
incr = get_step(begin, incday or 1) |
while begin < end: |
@@ -282,34 +279,29 @@ def last_day(somedate): |
def ustrftime(somedate, fmt='%Y-%m-%d'): |
"""like strftime, but returns a unicode string instead of an encoded |
- string which may be problematic with localized date. |
+ string which' may be problematic with localized date. |
+ |
+ encoding is guessed by locale.getpreferredencoding() |
""" |
- if sys.version_info >= (3, 3): |
- # datetime.date.strftime() supports dates since year 1 in Python >=3.3. |
- return somedate.strftime(fmt) |
- else: |
- try: |
- if sys.version_info < (3, 0): |
- encoding = getlocale(LC_TIME)[1] or 'ascii' |
- return unicode(somedate.strftime(str(fmt)), encoding) |
- else: |
- return somedate.strftime(fmt) |
- except ValueError: |
- if somedate.year >= 1900: |
- raise |
- # datetime is not happy with dates before 1900 |
- # we try to work around this, assuming a simple |
- # format string |
- fields = {'Y': somedate.year, |
- 'm': somedate.month, |
- 'd': somedate.day, |
- } |
- if isinstance(somedate, datetime): |
- fields.update({'H': somedate.hour, |
- 'M': somedate.minute, |
- 'S': somedate.second}) |
- fmt = re.sub('%([YmdHMS])', r'%(\1)02d', fmt) |
- return unicode(fmt) % fields |
+ encoding = getpreferredencoding(do_setlocale=False) or 'UTF-8' |
+ try: |
+ return unicode(somedate.strftime(str(fmt)), encoding) |
+ except ValueError, exc: |
+ if somedate.year >= 1900: |
+ raise |
+ # datetime is not happy with dates before 1900 |
+ # we try to work around this, assuming a simple |
+ # format string |
+ fields = {'Y': somedate.year, |
+ 'm': somedate.month, |
+ 'd': somedate.day, |
+ } |
+ if isinstance(somedate, datetime): |
+ fields.update({'H': somedate.hour, |
+ 'M': somedate.minute, |
+ 'S': somedate.second}) |
+ fmt = re.sub('%([YmdHMS])', r'%(\1)02d', fmt) |
+ return unicode(fmt) % fields |
def utcdatetime(dt): |
if dt.tzinfo is None: |