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

« back to all changes in this revision

Viewing changes to ivle/date.py

  • Committer: William Grant
  • Date: 2009-05-26 02:02:56 UTC
  • Revision ID: grantw@unimelb.edu.au-20090526020256-py3q01f6l7f6nwbu
Add some doctests to ivle.date.

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
51
    return dt.strftime("%a %b %d %Y, %l:%M%P")
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)