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

« back to all changes in this revision

Viewing changes to ivle/date.py

  • Committer: Matt Giuca
  • Date: 2009-05-12 15:08:45 UTC
  • mto: This revision was merged to the branch mainline in revision 1247.
  • Revision ID: matt.giuca@gmail.com-20090512150845-fg480l1qh7le0ypz
ivle-fetchsubmissions: In a stunningly awful hack, detects pre-Python2.6 and
    changes make_zip to behave correctly for the awful restriction in zipfile
    that you can't add directories.
    (Stops trying to add directories, and hacks in the footer writing if there
    is an empty file).

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.
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
 
    '''
 
24
    '''Return the given datetime, or convert the given seconds since epoch.'''
36
25
    if type(datetime_or_seconds) is datetime.datetime:
37
26
        return datetime_or_seconds
38
27
    return datetime.datetime.fromtimestamp(datetime_or_seconds)
43
32
    Given a datetime or number of seconds elapsed since the epoch,
44
33
    generates a string representing the date/time in human-readable form.
45
34
    "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'
49
35
    """
50
36
    dt = get_datetime(datetime_or_seconds)
51
 
    return dt.strftime("%a %b %d %Y, %l:%M%P")
 
37
    return dt.strftime("%a %b %d %Y, %I:%M %p")
52
38
 
53
39
def make_date_nice_short(datetime_or_seconds):
54
40
    """Generate a very compact human-readable representation of a date.
56
42
    Given a datetime or number of seconds elapsed since the epoch,
57
43
    generates a string representing the date in human-readable form.
58
44
    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, 2009'
71
45
    """
72
46
 
73
47
    dt = get_datetime(datetime_or_seconds)
103
77
 
104
78
    Also unlike make_date_nice_short, it is suitable for use in the middle of
105
79
    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'
135
80
    """
136
81
 
137
82
    dt = get_datetime(datetime_or_seconds)
167
112
    if dt < now:
168
113
        if dt.date() == now.date():
169
114
            # Today.
170
 
            return dt.strftime('today at %l:%M%P')
 
115
            return dt.strftime('today at %I:%M %p')
171
116
        elif dt.date() == now.date() - datetime.timedelta(days=1):
172
117
            # Yesterday.
173
 
            return dt.strftime('yesterday at %l:%M%P')
 
118
            return dt.strftime('yesterday at %I:%M %p')
174
119
    elif dt > now:
175
120
        if dt.date() == now.date():
176
121
            # Today.
177
 
            return dt.strftime('today at %l:%M%P')
 
122
            return dt.strftime('today at %I:%M %p')
178
123
        elif dt.date() == now.date() + datetime.timedelta(days=1):
179
124
            # Tomorrow
180
 
            return dt.strftime('tomorrow at %l:%M%P')
 
125
            return dt.strftime('tomorrow at %I:%M %p')
181
126
 
182
 
    return dt.strftime('on %Y-%m-%d at %l:%M%P')
 
127
    return dt.strftime('on %Y-%m-%d at %I:%M %p')