~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/date.py

  • Committer: Matt Giuca
  • Date: 2009-12-01 04:27:58 UTC
  • mfrom: (1164.2.46 sphinx-docs)
  • Revision ID: matt.giuca@gmail.com-20091201042758-wuxd9bdec00c283i
Merged sphinx-docs branch. This adds Sphinx documentation for the entire IVLE system (for system administrators and developers), and removes all of our random old document files (all either irrelevant, or moved into the Sphinx docs nicely). Currently incomplete, but ready to merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
import datetime
22
22
 
23
23
def get_datetime(datetime_or_seconds):
24
 
    '''Return the given datetime, or convert the given seconds since epoch.'''
 
24
    '''Return the given datetime, or convert the given seconds since epoch.
 
25
 
 
26
    >>> get_datetime(1000000000)
 
27
    datetime.datetime(2001, 9, 9, 11, 46, 40)
 
28
    >>> get_datetime(2000000000)
 
29
    datetime.datetime(2033, 5, 18, 13, 33, 20)
 
30
 
 
31
    >>> get_datetime(datetime.datetime(2009, 5, 26, 11, 38, 53))
 
32
    datetime.datetime(2009, 5, 26, 11, 38, 53)
 
33
    >>> get_datetime(datetime.datetime(2001, 9, 9, 11, 46, 40))
 
34
    datetime.datetime(2001, 9, 9, 11, 46, 40)
 
35
    '''
25
36
    if type(datetime_or_seconds) is datetime.datetime:
26
37
        return datetime_or_seconds
27
38
    return datetime.datetime.fromtimestamp(datetime_or_seconds)
32
43
    Given a datetime or number of seconds elapsed since the epoch,
33
44
    generates a string representing the date/time in human-readable form.
34
45
    "ddd mmm dd, yyyy h:m a"
 
46
 
 
47
    >>> make_date_nice(datetime.datetime(2009, 5, 26, 11, 38, 53))
 
48
    'Tue May 26 2009, 11:38am'
35
49
    """
36
50
    dt = get_datetime(datetime_or_seconds)
37
 
    return dt.strftime("%a %b %d %Y, %I:%M %p")
 
51
    return dt.strftime("%a %b %d %Y, %l:%M%P")
38
52
 
39
53
def make_date_nice_short(datetime_or_seconds):
40
54
    """Generate a very compact human-readable representation of a date.
42
56
    Given a datetime or number of seconds elapsed since the epoch,
43
57
    generates a string representing the date in human-readable form.
44
58
    Does not include the time.
 
59
 
 
60
    >>> now = datetime.datetime.now()
 
61
    >>> make_date_nice_short(now)
 
62
    'Today'
 
63
    >>> make_date_nice_short(now - datetime.timedelta(1))
 
64
    'Yesterday'
 
65
    >>> make_date_nice_short(now - datetime.timedelta(2))
 
66
    '2 days ago'
 
67
    >>> make_date_nice_short(now - datetime.timedelta(5))
 
68
    '5 days ago'
 
69
    >>> make_date_nice_short(1242783748)
 
70
    'May 20'
45
71
    """
46
72
 
47
73
    dt = get_datetime(datetime_or_seconds)
77
103
 
78
104
    Also unlike make_date_nice_short, it is suitable for use in the middle of
79
105
    a block of prose and properly handles timestamps in the future nicely.
 
106
 
 
107
    >>> now = datetime.datetime.now()
 
108
    >>> today = now.date()
 
109
    >>> time = datetime.time(10, 35, 40)
 
110
    >>> earlier = datetime.datetime.combine(today, time)
 
111
    >>> date = datetime.datetime(2009, 5, 20, 21, 19, 53)
 
112
 
 
113
    >>> format_datetime_for_paragraph(now)
 
114
    'now'
 
115
 
 
116
    # We can go backwards and forwards a little while and be pretty.
 
117
    >>> format_datetime_for_paragraph(now - datetime.timedelta(0, 40))
 
118
    '40 seconds ago'
 
119
    >>> format_datetime_for_paragraph(now + datetime.timedelta(0, 30))
 
120
    'in 29 seconds'
 
121
 
 
122
    >>> format_datetime_for_paragraph(now - datetime.timedelta(0, 245))
 
123
    '4 minutes ago'
 
124
    >>> format_datetime_for_paragraph(now + datetime.timedelta(0, 3500))
 
125
    'in 58 minutes'
 
126
 
 
127
    # If we go back further, it gets a bit ugly.
 
128
    >>> format_datetime_for_paragraph(earlier - datetime.timedelta(1))
 
129
    'yesterday at 10:35am'
 
130
    >>> format_datetime_for_paragraph(date)
 
131
    'on 2009-05-20 at  9:19pm'
 
132
 
 
133
    >>> format_datetime_for_paragraph(earlier + datetime.timedelta(1))
 
134
    'tomorrow at 10:35am'
80
135
    """
81
136
 
82
137
    dt = get_datetime(datetime_or_seconds)
112
167
    if dt < now:
113
168
        if dt.date() == now.date():
114
169
            # Today.
115
 
            return dt.strftime('today at %I:%M %p')
 
170
            return dt.strftime('today at %l:%M%P')
116
171
        elif dt.date() == now.date() - datetime.timedelta(days=1):
117
172
            # Yesterday.
118
 
            return dt.strftime('yesterday at %I:%M %p')
 
173
            return dt.strftime('yesterday at %l:%M%P')
119
174
    elif dt > now:
120
175
        if dt.date() == now.date():
121
176
            # Today.
122
 
            return dt.strftime('today at %I:%M %p')
 
177
            return dt.strftime('today at %l:%M%P')
123
178
        elif dt.date() == now.date() + datetime.timedelta(days=1):
124
179
            # Tomorrow
125
 
            return dt.strftime('tomorrow at %I:%M %p')
 
180
            return dt.strftime('tomorrow at %l:%M%P')
126
181
 
127
 
    return dt.strftime('on %Y-%m-%d at %I:%M %p')
 
182
    return dt.strftime('on %Y-%m-%d at %l:%M%P')