51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
#this repository contains the full copyright notices and license terms.
|
|
#Copyright (c) 2002-2007 John D. Hunter; All Rights Reserved
|
|
import time
|
|
|
|
|
|
def datetime_strftime(date, fmt):
|
|
'''
|
|
Allow datetime strftime formatting for years before 1900.
|
|
See http://bugs.python.org/issue1777412
|
|
'''
|
|
if date.year > 1900:
|
|
return date.strftime(fmt)
|
|
|
|
def _findall(text, substr):
|
|
# Also finds overlaps
|
|
sites = []
|
|
i = 0
|
|
while True:
|
|
j = text.find(substr, i)
|
|
if j == -1:
|
|
break
|
|
sites.append(j)
|
|
i = j + 1
|
|
return sites
|
|
|
|
year = date.year
|
|
# For every non-leap year century, advance by
|
|
# 6 years to get into the 28-year repeat cycle
|
|
delta = 2000 - year
|
|
off = 6 * (delta // 100 + delta // 400)
|
|
year = year + off
|
|
# Move to around the year 2000
|
|
year = year + ((2000 - year) // 28) * 28
|
|
timetuple = date.timetuple()
|
|
string1 = time.strftime(fmt, (year,) + timetuple[1:])
|
|
sites1 = _findall(string1, str(year))
|
|
|
|
string2 = time.strftime(fmt, (year + 28,) + timetuple[1:])
|
|
sites2 = _findall(string2, str(year + 28))
|
|
|
|
sites = []
|
|
for site in sites1:
|
|
if site in sites2:
|
|
sites.append(site)
|
|
|
|
syear = "%4d" % (date.year,)
|
|
for site in sites:
|
|
string1 = string1[:site] + syear + string1[site + 4:]
|
|
return string1
|