~jconti/recent-notifications/trunk

175 by Jason Conti
Ported Notification.py to gobject introspection, everything except dbus. Going to attempt that next, but may revert if it doesn't work so well yet.
1
"""
2
Timestamp.py
3
by Jason Conti
4
March 15, 2010
5
updated: March 26, 2011
6
7
Functions for working with timestamps.
8
"""
9
10
import locale
11
12
from datetime import datetime
13
14
from Translations import _, ngettext
15
16
def now():
17
  """Returns a datetime objects with the current timestamp."""
18
  return datetime.now()
19
20
def locale_date(timestamp):
21
  """Returns a string with the date in the current locales format."""
22
  return timestamp.strftime(locale.nl_langinfo(locale.D_FMT))
23
24
def locale_datetime(timestamp):
25
  """Returns a string with the date and time in the current locales format."""
26
  return timestamp.strftime(locale.nl_langinfo(locale.D_T_FMT))
27
28
def locale_time(timestamp):
29
  """Returns a string with the time in the current locales format."""
30
  return timestamp.strftime(locale.nl_langinfo(locale.T_FMT))
31
32
def time_ago_in_words(timestamp):
33
  """Returns a string in a format such as "less than a minute ago" or "2 hours ago"
34
  the distance in time from timestamp to now. If the difference is more than
35
  a day, returns locale_datetime instead."""
36
  delta = now() - timestamp
37
  s = delta.seconds
38
  m = s / 60
39
  h = m / 60
40
  d = delta.days
41
42
  if d < 1:
43
    # Seconds
44
    if s < 60:
45
      return _("less than a minute ago")
46
    # Minutes
47
    elif m < 60:
48
      return ngettext("1 minute ago", "{0} minutes ago", m).format(m)
49
    # Hours
50
    else:
51
      return ngettext("1 hour ago", "{0} hours ago", h).format(h)
52
53
  # Greater than a day
54
  else:
55
    return locale_datetime(timestamp)
56