2. Parsing and Formatting

2.1. Date formats

2.1.1. Date format in USA

Listing 158. Formal date format in USA [Wik19d]
4/12/61
April 12, 1961

2.1.2. Date format in Japan

Listing 159. Formal date format in Japan [Wik19c]
20/12/31

2.1.3. Date format in Germany

Listing 160. Formal date format in Germany
12.04.1961

2.1.4. Date format in Poland

12.4.1961
12.04.1961

12 IV 1961
12.IV.1961

12/4/1961
12/04/1961

12 kwietnia 1961
12 kwiecień 1961

2.2. Time formats

2.2.1. 24 and 12 hour clock

  • What AM stands for?

  • What PM stands for?

17:00
5:00 PM

2.2.2. Noon and Midnight

  • Which time is a midnight?

  • Which time is a noon?

  • Confusion at noon and midnight

  • Is 12:00 a noon (in 24h format), or someone just simply forgot to put AM/PM?

12:00 am
12:00 pm

12:00
24:00

00:00
0:00

2.2.3. Times after 24:00

23:59:59
23:59:60
24:00
24:01
25:00
27:45
14:00-30:00

2.2.4. Military time

1200J
1200Z

2.3. ISO 8601 Standard

2.3.1. Dates

1961-04-12

2.3.2. Date and time

  • "Z" (Zulu) means UTC

  • "T" separates date and time

Listing 161. Date and time with second precision
1961-04-12T06:07:00Z
Listing 162. Date and time with with millisecond precision
1961-04-12T06:07:00.123Z
Listing 163. Date and time with microsecond precision
1961-04-12T06:07:00.123456Z

2.3.3. Noon and Midnight

  • "00:00" - midnight, at the beginning of a day

  • "24:00" - midnight, at the end of a day (not recommended)

  • "2007-04-05T24:00" is equal to "2007-04-06T00:00"

2.3.4. Weeks

Listing 164. Note year/month changes during the week
2009-W01            # First week of 2009
2009-W01-1          # Monday 29 December 2008
2009-W53-7          # Sunday 3 January 2010

2.3.5. Timezone

  • "Z" (Zulu) means UTC

Listing 165. Time zone notation
<time>Z
<time>±hh:mm
<time>±hhmm
<time>±hh

2.3.6. Duration

  • Format: P[n]Y[n]M[n]DT[n]H[n]M[n]S

Table 26. Duration format

Format

Designator

Description

P

duration (period)

placed at the start of the duration representation

Y

year

number of years

M

month

number of months

W

week

number of weeks

D

day

number of days

T

time

precedes the time components of the representation

H

hour

number of hours

M

minute

number of minutes

S

second

number of seconds

Listing 166. Example
P8Y3M8DT20H49M15S

# Period of:
#   8 years
#   3 months
#   8 days
#   20 hours
#   49 minutes
#   5 seconds

2.4. Table of date and time parsing and formatting parameters

Note

Prawie wszystkie parametry są podobne różnych językach programowania. Od czasu do czasu występują małe zmiany, np. w JavaScript minuty to i a nie M

Table 27. Tabelka parametrów formatowania i parsowania dat i czasu

Directive

Example

Meaning

%a

Sun, Mon, …, Sat

Weekday as locale's abbreviated name

%A

Sunday, Monday, …, Saturday (en_US)

Weekday as locale's full name

%w

0, 1, …, 6

Weekday as a decimal number, where 0 is Sunday and 6 is Saturday

%d

01, 02, …, 31

Day of the month as a zero-padded decimal number

%b

Jan, Feb, …, Dec (en_US)

Month as locale's abbreviated name

%B

January, February, …, December (en_US)

Month as locale’s full name

%m

01, 02, …, 12

Month as a zero-padded decimal number

%y

00, 01, …, 99

Year without century as a zero-padded decimal number

%Y

0001, 0002, …, 2013, 2014, …, 9998, 9999

Year with century as a decimal number

%H

00, 01, …, 23

Hour (24-hour clock) as a zero-padded decimal number

%I

01, 02, …, 12

Hour (12-hour clock) as a zero-padded decimal number

%p

AM, PM (en_US)

Locale’s equivalent of either AM or PM

%M

00, 01, …, 59

Minute as a zero-padded decimal number

%S

00, 01, …, 59

Second as a zero-padded decimal number

%f

000000, 000001, …, 999999

Microsecond as a decimal number, zero-padded on the left

%z

(empty), +0000, -0400, +1030

UTC offset in the form +HHMM or -HHMM (empty string if the object is naive)

%Z

(empty), UTC, EST, CST

Time zone name (empty string if the object is naive)

%j

001, 002, …, 366

Day of the year as a zero-padded decimal number

%U

00, 01, …, 53

Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0

%W

00, 01, …, 53

Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0

%c

Tue Aug 16 21:30:00 1988 (en_US)

Locale’s appropriate date and time representation

%x

08/16/1988 (en_US); 16.08.1988 (de_DE)

Locale’s appropriate date representation

%X

21:30:00

Locale’s appropriate time representation

%%

%

A literal % character

%G

0001, 0002, …, 2013, 2014, …, 9998, 9999

ISO 8601 year with century representing the year that contains the greater part of the ISO week (%V)

%u

1, 2, …, 7

ISO 8601 weekday as a decimal number where 1 is Monday

%V

01, 02, …, 53

ISO 8601 week as a decimal number with Monday as the first day of the week. Week 01 is the week containing Jan 4

2.5. Date formatting

2.5.1. ISO Format

Listing 167. Datetime formatting to ISO format
from datetime import datetime

dt = datetime(1969, 7, 21, 2, 56, 15)

dt.isoformat()
# 1969-07-21T02:56:15
Listing 168. Date formatting to ISO format
from datetime import date

d = date(1969, 7, 21)

d.isoformat()
# 1969-07-21

2.5.2. f-string formatting

Listing 169. Datetime formatting as string with f'...'
from datetime import datetime

gagarin = datetime(1961, 4, 12, 6, 7)

print(f'Gagarin launched on {gagarin:%Y-%m-%d}')
# Gagarin launched on 1961-04-12
Listing 170. Datetime formatting as string with f'...'
from datetime import datetime

gagarin = datetime(1961, 4, 12, 6, 7)

print(f'Gagarin launched on {gagarin:%Y-%m-%d %H:%M}')
# Gagarin launched on 1961-04-12 06:07
Listing 171. Datetime formatting as string with f'...'
from datetime import datetime

gagarin = datetime(1961, 4, 12, 6, 7)
format = '%Y-%m-%d %H:%M'

print(f'Gagarin launched on {gagarin:{format}}')
# Gagarin launched on 1961-04-12 06:07

2.5.3. Format to string

Listing 172. Datetime formatting as string with .strftime()
from datetime import datetime

gagarin = datetime(1961, 4, 12, 6, 7)
formatted = gagarin.strftime('%Y-%m-%d %H:%M')

print(f'Gagarin launched on {formatted}')
# Gagarin launched on 1961-04-12 06:07

2.6. Parsing dates

  • Parsing - analyze (a sentence) into its parts and describe their syntactic roles.

Listing 173. Datetime parsing from string
from datetime import datetime

sputnik = '4 October 1957, 19:28:34 [UTC]'

out = datetime.strptime(sputnik, '%d %B %Y, %H:%M:%S [%Z]')
# datetime.datetime(1957, 10, 4, 19, 28, 34)

print(out)
# 1957-10-04 19:28:34

2.7. Assignments

2.7.1. From ISO date format

  1. Podaną datę:

    Listing 174. Convert str from ISO date format to datetime objects
    1969-07-21T02:56:15.123Z
    
  2. Przedstaw datę jako obiekt datetime

2.7.2. To ISO date format

  1. Podaną poniżej datę przekonwertuj do obiektu datetime:

    gagarin = 'April 12, 1961 6:07 local time'  # Asia/Almaty
    
  2. Wyświetl w formacie ISO datę i czas, tj.:

    Listing 175. "Rok-Miesiąc-DzieńTGodzina:Minuta:Sekunda.MikrosekundyZ"
    1961-04-12T06:07:00.000000
    

2.7.3. US date and time format

  1. Rozczytaj datę z formatu amerykańskiego długiego (skopiuj z cudzysłowami):

    armstrong = '"July 21st, 1969 2:56:15 AM UTC"'
    
  2. Wyświetl datę w formacie amerykańskim krótkim:

    Listing 176. "Miesiąc/Dzień/Rok Godzina:Minuta AM/PM"
    7/21/69 2:56 AM
    
Hint
  • Wpisz "local time" jako zwykły tekst w parametrze fmt funkcji .strptime()

  • Wpisz znaki cudzysłowia " jako zwykły tekst w parametrze fmt funkcji .strptime()