annotate examples/trac/trac/util/datefmt.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2003-2006 Edgewall Software
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2003-2004 Jonas Borgström <jonas@edgewall.com>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 # Copyright (C) 2006 Matthew Good <trac@matt-good.net>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 # Copyright (C) 2005-2006 Christian Boos <cboos@neuf.fr>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 # All rights reserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 # This software is licensed as described in the file COPYING, which
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 # you should have received as part of this distribution. The terms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 # are also available at http://trac.edgewall.com/license.html.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 # This software consists of voluntary contributions made by many
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 # individuals. For exact contribution history, see the revision
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 # history and logs, available at http://projects.edgewall.com/trac/.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 # Author: Jonas Borgström <jonas@edgewall.com>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18 # Matthew Good <trac@matt-good.net>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 import locale
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21 import sys
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 import time
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 # Date/time utilities
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 def pretty_timedelta(time1, time2=None, resolution=None):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 """Calculate time delta (inaccurately, only for decorative purposes ;-) for
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28 prettyprinting. If time1 is None, the current time is used."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 if not time1: time1 = time.time()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 if not time2: time2 = time.time()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31 if time1 > time2:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 time2, time1 = time1, time2
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 units = ((3600 * 24 * 365, 'year', 'years'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 (3600 * 24 * 30, 'month', 'months'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 (3600 * 24 * 7, 'week', 'weeks'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 (3600 * 24, 'day', 'days'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 (3600, 'hour', 'hours'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 (60, 'minute', 'minutes'))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 age_s = int(time2 - time1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 if resolution and age_s < resolution:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 return ''
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 if age_s < 60:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 return '%i second%s' % (age_s, age_s != 1 and 's' or '')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 for u, unit, unit_plural in units:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 r = float(age_s) / float(u)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 if r >= 0.9:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 r = int(round(r))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 return '%d %s' % (r, r == 1 and unit or unit_plural)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 return ''
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 def format_datetime(t=None, format='%x %X', gmt=False):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 if t is None:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 t = time.time()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 if not isinstance(t, (list, tuple, time.struct_time)):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 if gmt:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 t = time.gmtime(int(t))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 else:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 t = time.localtime(int(t))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 text = time.strftime(format, t)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 encoding = locale.getpreferredencoding()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 if sys.platform != 'win32':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 encoding = locale.getlocale(locale.LC_TIME)[1] or encoding
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 # the above is broken on win32, e.g. we'd get '437' instead of 'cp437'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 return unicode(text, encoding, 'replace')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 def format_date(t=None, format='%x', gmt=False):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 return format_datetime(t, format, gmt)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 def format_time(t=None, format='%X', gmt=False):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 return format_datetime(t, format, gmt)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 def get_date_format_hint():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 t = time.localtime(0)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 t = (1999, 10, 29, t[3], t[4], t[5], t[6], t[7], t[8])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 tmpl = format_date(t)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 return tmpl.replace('1999', 'YYYY', 1).replace('99', 'YY', 1) \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 .replace('10', 'MM', 1).replace('29', 'DD', 1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 def get_datetime_format_hint():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 t = time.localtime(0)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 t = (1999, 10, 29, 23, 59, 58, t[6], t[7], t[8])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 tmpl = format_datetime(t)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 return tmpl.replace('1999', 'YYYY', 1).replace('99', 'YY', 1) \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 .replace('10', 'MM', 1).replace('29', 'DD', 1) \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 .replace('23', 'hh', 1).replace('59', 'mm', 1) \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 .replace('58', 'ss', 1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 def http_date(t=None):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 """Format t as a rfc822 timestamp"""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 if t is None:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 t = time.time()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 if not isinstance(t, (list, tuple, time.struct_time)):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 t = time.gmtime(int(t))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 'Oct', 'Nov', 'Dec']
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 return '%s, %02d %s %04d %02d:%02d:%02d GMT' % (
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 weekdays[t.tm_wday], t.tm_mday, months[t.tm_mon - 1], t.tm_year,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 t.tm_hour, t.tm_min, t.tm_sec)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 def parse_date(text):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 seconds = None
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 text = text.strip()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 for format in ['%x %X', '%x, %X', '%X %x', '%X, %x', '%x', '%c',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 '%b %d, %Y']:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 date = time.strptime(text, format)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 seconds = time.mktime(date)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 break
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 except ValueError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 continue
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 if seconds == None:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 raise ValueError, '%s is not a known date format.' % text
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 return seconds
Copyright (C) 2012-2017 Edgewall Software