def format(self, value): if not isinstance(value, datetime): return value configlet = getUtility(IFormatterConfiglet) tz = timezone(configlet.timezone) if value.tzinfo is None: value = utc.localize(value) value = value.astimezone(tz) offset = value.tzinfo.utcoffset(value) if offset < timedelta(): ind = -1 else: ind = 1 offset = ind*(abs(offset).seconds/600)*10 value = FixedOffset(offset).normalize(value) fdate = unicode(value.strftime(str(getattr(configlet,'date_'+self.tp)))) ftime = unicode(value.strftime(str(getattr(configlet,'time_'+self.tp)))) formatted = value.strftime('%B %d, %Y %H:%M:%S %z') return u'<span class="zojax-formatter-fancydatetime" date="%s" time="%s" offset="%s" value="%s" format="%s">%s</span>' \ % (fdate, ftime, offset, value.strftime('%B %d, %Y %H:%M:%S %z'), self.tp, formatted)
def format(self, value): configlet = getUtility(IFormatterConfiglet) tz = timezone(configlet.timezone) if value.tzinfo is None: value = utc.localize(value) value = value.astimezone(tz) now = datetime.now(utc) delta = now - value.astimezone(utc) key = 'past' if delta < timedelta(): delta = - delta + timedelta(seconds=1) #due to python implementation key = 'future' offset = value.tzinfo.utcoffset(value) if offset < timedelta(): ind = -1 else: ind = 1 offset = ind*(abs(offset).seconds/600)*10 value = FixedOffset(offset).normalize(value) years, months, weeks, hours, minutes = ( delta.days/365, delta.days/30, delta.days/7, delta.seconds/3600, delta.seconds/60) formatted = None if years > 0: formatted = translate(self.messages[key]['year'], 'zojax.formatter', mapping={'value': years}) elif months > 0: formatted = translate(self.messages[key]['month'],'zojax.formatter', mapping={'value': months}) elif weeks > 0: formatted = translate(self.messages[key]['week'], 'zojax.formatter', mapping={'value': weeks}) elif delta.days > 0: formatted = translate(self.messages[key]['day'], 'zojax.formatter', mapping={'value': delta.days}) elif hours > 0: formatted = translate(self.messages[key]['hour'], 'zojax.formatter', mapping={'value': hours}) elif minutes > 0: formatted = translate( self.messages[key]['minute'], 'zojax.formatter', mapping={'value': minutes}) else: formatted = translate( self.messages[key]['second'], 'zojax.formatter', mapping={'value': delta.seconds}) return """<span class="zojax-formatter-humandatetime" value="%s">%s</span>""" \ % (value.strftime('%B %d, %Y %H:%M:%S %z'), formatted)