Passed
Push — master ( 3b6562...2a423d )
by Jochen
01:48
created

byceps.util.datetime.format._format_date_smart()   A

Complexity

Conditions 4

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 9
nop 1
dl 0
loc 11
rs 9.95
c 0
b 0
f 0
1
"""
2
byceps.util.datetime.format
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
Date/time formatting.
6
7
:Copyright: 2006-2019 Jochen Kupperschmidt
8
:License: Modified BSD, see LICENSE for details.
9
"""
10
11
from datetime import date, datetime, time, timedelta
12
from typing import Union
13
14
15
DateOrDateTime = Union[date, datetime]
16
17
18
def format_custom(dt: DateOrDateTime, pattern: str) -> str:
19
    return dt.strftime(pattern)
20
21
22
def format_date_iso(d: date) -> str:
23
    return d.strftime('%Y-%m-%d')
24
25
26
def format_date_short(d: date, *, smart: bool=True) -> str:
27
    return (smart and _format_date_smart(d)) or d.strftime('%d.%m.%Y')
28
29
30
def format_date_long(d: date, *, smart: bool=True) -> str:
31
    return (smart and _format_date_smart(d)) or d.strftime('%A, %d. %B %Y')
32
33
34
def format_datetime_iso(dt: datetime) -> str:
35
    return dt.strftime('%Y-%m-%dT%H:%M:%S')
36
37
38
def format_datetime_short(dt: datetime, *, smart: bool=True) -> str:
39
    date_string = format_date_short(dt.date(), smart=smart)
40
    time_string = format_time(dt.time())
41
42
    return '{}, {}'.format(date_string, time_string)
43
44
45
def format_datetime_long(dt: datetime, *, smart: bool=True) -> str:
46
    date_string = format_date_long(dt.date(), smart=smart)
47
    time_string = format_time(dt.time())
48
49
    return '{}, {}'.format(date_string, time_string)
50
51
52
def format_time(t: time) -> str:
53
    return t.strftime('%H:%M Uhr')
54
55
56
# helpers
57
58
59
def _format_date_smart(d: DateOrDateTime) -> str:
60
    if isinstance(d, datetime):
61
        d = d.date()
62
63
    today = date.today()
64
    if d == today:
65
        return 'heute'
66
    elif d == (today - timedelta(days=1)):
67
        return 'gestern'
68
    else:
69
        return None
70