1 of 154

Když DateTime nestačí

�Práce s časem pohodlně a bezpečně

2 of 154

Jiří Pudil

su z Brna

fanoušek open-source

závislák na kávě

generátor hluku ze strun

3 of 154

4 of 154

Co je to vlastně ten čas?

5 of 154

6 of 154

7 of 154

[Time is] complicated.�Very complicated.

— The Doctor

8 of 154

Co je to vlastně ten čas?

Time is the continued sequence of existence and events that occurs in an apparently irreversible succession from the past, through the present, into the future. — Wikipedia

9 of 154

Co je to vlastně ten čas?

Time is often referred to as a fourth dimension, along with three spatial dimensions. — Wikipedia

10 of 154

Co je to vlastně ten čas?

The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia

11 of 154

Co je to vlastně ten čas?

The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia

12 of 154

Co je to vlastně ten čas?

The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia

13 of 154

Přesný bod v čase?

The universe, and time itself, had a beginning in the Big Bang, about�15 billion years ago. — Stephen Hawking, The Beginning of Time

více než 473,364,000,000,000,000 sekund

14 of 154

Přesný bod v čase!

Unix time is defined as the number of seconds that have elapsed since 00:00:00 UTC, Thursday, 1 January 1970, minus the number of leap seconds that have taken place since then. — Wikipedia

více než 1,650,000,000 sekund

EPOCHA

15 of 154

Datum a čas

Jak identifikovat BOD V ČASE praktickým způsobem?

více než 1,650,000,000 sekund

EPOCHA

16 of 154

Datum a čas

Jak identifikovat BOD V ČASE praktickým způsobem?

1,654,265,700

17 of 154

Stručná historie času

18 of 154

Stručná historie měření času

19 of 154

20 of 154

21 of 154

Photo by Laura Ockel on Unsplash

22 of 154

23 of 154

Photo by peter bucks on Unsplash

24 of 154

Photo by Denis Chick on Unsplash

25 of 154

Photo by originalpickaxe on Wikimedia Commons

26 of 154

27 of 154

28 of 154

29 of 154

30 of 154

31 of 154

Datum a čas

3. 6. 16:15

1,654,265,700 sekund

EPOCHA

32 of 154

Datum a čas

3. 6, 16:15 v Česku

3. 6, 15:15 v Anglii

4. 6. 0:15 v Austrálii

1,654,265,700 sekund

EPOCHA

33 of 154

Datum a čas

3. 6. 16:15�v Česku

1,654,265,700 sekund

EPOCHA

3. 6. 16:15�v Anglii

3600 sekund

34 of 154

Datum a čas

30. 10. 02:00�v Česku

1,667,088,000 sekund

EPOCHA

30. 10. 02:00�v Česku

3600 sekund

35 of 154

Datum a čas

27. 3. 01:00�v Česku

1,679,788,800 sekund

EPOCHA

27. 3. 03:00�v Česku

3600 sekund

36 of 154

37 of 154

IANA timezonedb

tzdb-2018a/ tzdb-2019a/ tzdb-2020a/ tzdb-2021a/ tzdb-2022a/�tzdb-2018b/ tzdb-2019b/ tzdb-2020b/ tzdb-2021b/�tzdb-2018c/ tzdb-2019c/ tzdb-2020c/ tzdb-2021c/�tzdb-2018d/ tzdb-2020d/ tzdb-2021d/�tzdb-2018e/ tzdb-2020e/ tzdb-2021e/�tzdb-2018f/ tzdb-2020f/�tzdb-2018g/�tzdb-2018h/�tzdb-2018i/

38 of 154

39 of 154

[Time is] complicated.�Very complicated.

— The Doctor

40 of 154

Čas ve webových aplikacích

41 of 154

42 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

43 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

44 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

45 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

46 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

47 of 154

Flight time approx. 2h 15min

Flight PAP101

WELCOME ON BOARD!

48 of 154

Starý dobrý \DateTime

49 of 154

Starý dobrý \DateTime

50 of 154

Photo by Alex Knight on Unsplash

51 of 154

Photo by Ana Azevedo on Unsplash

52 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new DateTime('2022-06-04')

53 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new DateTime('2022-06-04')

=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }

54 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new DateTime('2022-06-04')

=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }

55 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new DateTime('2022-06-04')

=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }

56 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 13:30:00')

57 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 13:30:00')

=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

58 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 13:30:00')

=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

59 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 13:30:00')

=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

60 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 14:45:00')

61 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 14:45:00')

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/Prague (+02:00)� }

62 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 14:45:00')

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/Prague (+02:00)� }

63 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new DateTime('2022-06-04 14:45:00', $tz)

64 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new DateTime('2022-06-04 14:45:00', $tz)

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }

65 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new DateTime('2022-06-04 14:45:00', $tz)

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }

66 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new DateTime('2022-06-04 14:45:00', $tz)

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }

67 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$opens = new DateTime('08:00:00')

$closes = new DateTime('22:00:00')

68 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$opens = new DateTime('08:00:00')

$closes = new DateTime('22:00:00')

=> DateTime {� date: 2022-06-03 08:00:00.0 Europe/Prague (+02:00)� }

69 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$monday = 🤔

70 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

71 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

72 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

73 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

74 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

75 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

76 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> 1654009641

77 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->modify('-20 minutes')

78 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->modify('-20 minutes')�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }

79 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->modify('-20 minutes')�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }

80 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$departs = new DateTime('2022-06-04 13:30:00')

$checkInOpens = $departs->modify('-1 month')

=> DateTime {� date: 2022-05-04 13:30:00.0 Europe/Prague (+02:00)� }

81 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->sub(new DateInterval('PT20M'))�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }

82 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$departs = new DateTime('2022-06-04 13:30:00')

$checkInOpens = $departs->sub(new DateInterval('P1M'))

=> DateTime {� date: 2022-05-04 13:30:00.0 Europe/Prague (+02:00)� }

83 of 154

Flight time approx. 2h 15min

Flight PAP101

WELCOME ON BOARD!

new DateInterval('PT2H15M')

=> DateInterval {� interval: + 02:15:00.0� }

84 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateInterval('P1MT2H')

=> DateInterval {� interval: + 1mo 02:00:00.0� }

85 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateInterval('P1MT2H')

=> DateInterval {� interval: + 1mo 02:00:00.0� }

86 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateInterval('P1MT2H')

=> DateInterval {� interval: + 1mo 02:00:00.0� }

87 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->modify('-20 minutes')�=> $departs = DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }

88 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTimeImmutable('2022-06-04 13:30:00')

$boardingCloses = $departs->modify('-20 minutes')�=> $departs = DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

89 of 154

Datum a čas jsou

value objekty

90 of 154

Domain-Driven Design is an approach to software development that centers the development on programming a domain model that has a rich understanding of the processes and rules of a domain.

— Martin Fowler

91 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new DateTime('2022-06-04')

=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }

92 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

new Date('2022-06-04')

=> Date {� date: 2022-06-04� }

93 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new DateTime('2022-06-04 13:30:00')

=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

94 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

new Time('13:30:00')

=> Time {� time: 13:30:00.0� }

95 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new DateTime('2022-06-04 14:45:00', $tz)

=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }

96 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

$tz = new DateTimeZone('Europe/London')

new Time('14:45:00')

=> Time {� time: 2022-06-04 14:45:00.0� }

97 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$opens = new DateTime('08:00:00')

$closes = new DateTime('22:00:00')

=> DateTime {� date: 2022-06-03 08:00:00.0 Europe/Prague (+02:00)� }

98 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$opens = new Time('08:00:00')

$closes = new Time('22:00:00')

=> Time {� time: 08:00:00.0� }

99 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$monday = 🤔

100 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$monday = DayOfWeek::Monday

101 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }

102 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateTime('2022-05-31 17:07:21+02:00')

=> 1654009641

103 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new PointInTime('2022-05-31 17:07:21+02:00')

=> PointInTime {� value: 1654009641� }

104 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')�=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

105 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')�=> DateTime {� date: 2022-06-04 13:30:00.0� }

106 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTimeTz('2022-06-04 13:30:00', $tz)�=> DateTimeTz {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }

107 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = new DateTime('2022-06-04 13:30:00')

$boardingCloses = $departs->sub(new TimeInterval('PT20M'))�=> DateTime {� date: 2022-06-04 13:10:00.0� }

108 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$departs = new DateTime('2022-06-04 13:30:00')

$checkInOpens = $departs->sub(new DateInterval('P1M'))

=> DateTime {� date: 2022-05-04 13:30:00.0� }

109 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

new DateInterval('PT20M')

=> throw Error

110 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

(new Time('13:30:00'))->plus(new DateInterval('P1M'))

=> throw Error

111 of 154

I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.

— Abraham Maslow

112 of 154

113 of 154

[Time is] complicated.�Very complicated.

— The Doctor

114 of 154

115 of 154

116 of 154

Photo by Alex Knight on Unsplash

117 of 154

Photo by Ana Azevedo on Unsplash

118 of 154

JSR 310 Date and Time API

119 of 154

JSR 310 Date and Time API

(jo, Java)

120 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

LocalDate.of(2022, 6, 4)

=> LocalDate {� 2022-06-04� }

121 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

LocalTime.of(13, 30)

=> LocalTime {� 13:30� }

122 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

val departs = LocalDateTime.of(2022, 6, 4, 13, 30)

println(departs)

=> LocalDateTime {� 2022-06-04T13:30� }

123 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

val monday = DayOfWeek.MONDAY

124 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

Instant.ofEpochSecond(1654009641)

=> Instant {� 2022-05-31T15:07:21Z� }

125 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

instant.atZone(ZoneId.of("Europe/Prague"))

=> ZonedDateTime {� 2022-05-31T17:07:21+02:00[Europe/Prague]� }

126 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

instant.atZone(ZoneOffset.ofHours(2))

=> ZonedDateTime {� 2022-05-31T17:07:21+02:00� }

127 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

val zoned = instant.atZone(ZoneOffset.ofHours(2))

val utc = zoned.withZoneSameLocal(ZoneOffset.UTC)

=> ZonedDateTime {� 2022-05-31T17:07:21Z� }

128 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

val zoned = instant.atZone(ZoneOffset.ofHours(2))

val utc = zoned.withZoneSameInstant(ZoneOffset.UTC)

=> ZonedDateTime {� 2022-05-31T15:07:21Z� }

129 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

val departs = LocalDateTime.of(2022, 6, 4, 13, 30)

val boardingCloses = departs.minusMinutes(20)

println(boardingCloses)

=> LocalDateTime {� 2022-06-04T13:10� }

130 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

val departs = LocalDateTime.of(2022, 6, 4, 13, 30)

val boardingCloses = departs.minusMinutes(20)

println(departs)

=> LocalDateTime {� 2022-06-04T13:30� }

131 of 154

Flight time approx. 2h 15min

Flight PAP101

WELCOME ON BOARD!

val flightTime = Duration.ofHours(2).plusMinutes(15)

=> Duration {� PT2H15M� }

132 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

val oneMonth = Period.ofMonths(1)

=> Period {� P1M� }

133 of 154

Přepište svoje aplikace v Javě!

— já

134 of 154

Přepište svoje aplikace v Javě!

— já

135 of 154

Přepište svoje aplikace v Kotlinu!

— já

136 of 154

Přepište svoje aplikace v Kotlinu!

— já

137 of 154

composer require brick/date-time

138 of 154

OSR Ostrava

STN London Stansted

Jun 4

From

To

When

Search

LocalDate::of(2022, 6, 4);

=> LocalDate {� 2022-06-04� }

139 of 154

OSR Ostrava STN London Stansted� 13:30 14:45

Flight PAP101

Book

Jun 4

LocalTime::of(13, 30)

=> LocalTime {� 13:30� }

140 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = LocalDateTime::of(2022, 6, 4, 13, 30)

=> LocalDateTime {� 2022-06-04T13:30� }

141 of 154

Ostrava Airport Lounge

OPEN

Mon – Fri 08:00 – 22:00

Sat – Sun 09:00 – 17:00

Book

$monday = DayOfWeek::monday()

142 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

Instant::of(1654009641)

=> Instant {� 2022-05-31T15:07:21Z� }

143 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$instant->atZone(TimeZoneRegion::of("Europe/Prague"))

=> ZonedDateTime {� 2022-05-31T17:07:21+02:00[Europe/Prague]� }

144 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$instant->atZone(TimeZoneOffset::of(2))

=> ZonedDateTime {� 2022-05-31T17:07:21+02:00� }

145 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$zoned = $instant->atZone(TimeZoneOffset::of(2))

$utc = $zoned->withZoneSameLocal(TimeZone::utc())

=> ZonedDateTime {� 2022-05-31T17:07:21Z� }

146 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$zoned = $instant->atZone(TimeZoneOffset::of(2))

$utc = $zoned->withZoneSameInstant(TimeZone::utc())

=> ZonedDateTime {� 2022-05-31T15:07:21Z� }

147 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = LocalDateTime::of(2022, 6, 4, 13, 30)

$boardingCloses = $departs->minusMinutes(20)

var_dump($boardingCloses)

=> LocalDateTime {� 2022-06-04T13:10� }

148 of 154

Boarding Pass

PUDIL, JIRIMR

Jun 4

Departs�13:30

Boarding�12:40 – 13:10

$departs = LocalDateTime::of(2022, 6, 4, 13, 30)

$boardingCloses = $departs->minusMinutes(20)

var_dump($departs)

=> LocalDateTime {� 2022-06-04T13:30� }

149 of 154

Flight time approx. 2h 15min

Flight PAP101

WELCOME ON BOARD!

$flightTime = Duration::ofHours(2)->plusMinutes(15)

=> Duration {� PT2H15M� }

150 of 154

Booking YQG9H9EBR6WI

Confirmed May 31, 2022 at 17:07:21 UTC+2

Check-in

$oneMonth = Period::ofMonths(1)

=> Period {� P1M� }

151 of 154

composer require brick/date-time

152 of 154

153 of 154

[Time is] complicated.�Very complicated.

— The Doctor

154 of 154

Díky!

@jiripudil

jiripudil

me@jiripudil.cz

https://jiripudil.cz