MCP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ тЖТ

рдЧрдгрдирд╛ рджрд░реНрдЬ рдХрд░реЗрдВ

рд╕реВрддреНрд░ (рдлреЙрд░реНрдореВрд▓рд╛)

рд╡рд┐рдЬреНрдЮрд╛рдкрди

рдкрд░рд┐рдгрд╛рдо

UTC Date & Time
2023-11-14 22:13:20
UTC (рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯреЗрдб рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЯрд╛рдЗрдо)
рдШрдВрдЯрд╛ 22
рдорд┐рдирдЯ 13
рд╕реЗрдХрдВрдб 20
рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди (0=рд░рд╡рд┐рд╡рд╛рд░) 2
1970-01-01 рд╕реЗ рдЕрдм рддрдХ рдХреЗ рджрд┐рди 19,675

Unix рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХрдиреНрд╡рд░реНрдЯрд░ рдХреНрдпрд╛ рд╣реИ?

Unix рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк (рдЬрд┐рд╕реЗ epoch time рднреА рдХрд╣рддреЗ рд╣реИрдВ) рдЙрди рд╕реЗрдХрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ 1 рдЬрдирд╡рд░реА 1970 рдХреЛ 00:00:00 UTC рд╕реЗ рд▓реЗрдХрд░ рдЕрдм рддрдХ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ тАФ рдЗрд╕рдореЗрдВ leap seconds рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣ рдЯреВрд▓ рдЗрд╕ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрд╕рд╛рди рдХреЗ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ UTC рдХреИрд▓реЗрдВрдбрд░ рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди рднреА рдмрддрд╛рддрд╛ рд╣реИред

1970 рдПрдкреЙрдХ рд╕реЗ рдХрд┐рд╕реА рдмрд╛рдж рдХреА рддрд╛рд░реАрдЦ рддрдХ рд╕реЗрдХрдВрдб рдЧрд┐рдирддреА рд╣реБрдИ рд╕рдВрдЦреНрдпрд╛ рд░реЗрдЦрд╛
рдпреВрдирд┐рдХреНрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдПрдкреЙрдХ, рдпрд╛рдиреА 1 рдЬрдирд╡рд░реА 1970 UTC рдХреА рдЖрдзреА рд░рд╛рдд рд╕реЗ рдмреАрддреЗ рд╕реЗрдХрдВрдбреЛрдВ рдХреА рдЧрд┐рдирддреА рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ

рд╕реЗрдХрдВрдб рдореЗрдВ Unix рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдпрд╛ рдЯрд╛рдЗрдк рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1700000000) рдФрд░ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЖрдкрдХреЛ UTC рдореЗрдВ рд╕рд╛рд▓, рдорд╣реАрдирд╛, рджрд┐рди, рдШрдВрдЯрд╛, рдорд┐рдирдЯ рдФрд░ рд╕реЗрдХрдВрдб рдмрддрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди рдФрд░ epoch рд╕реЗ рдЕрдм рддрдХ рдмреАрддреЗ рджрд┐рдиреЛрдВ рдХреА рдХреБрд▓ рдЧрд┐рдирддреА рднреА рджреЗрдЧрд╛ред

рдлреЙрд░реНрдореВрд▓рд╛ рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рдореЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдХрдВрдбреЛрдВ рдХреЛ рдмрд╛рдБрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ: рджрд┐рди = floor(ts / 86400) рдФрд░ рдмрд╛рдХреА рдмрдЪрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕ рджрд┐рди рдХрд╛ рд╕рдордп рдмрддрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕ рджрд┐рдиреЛрдВ рдХреА рдЧрд┐рдирддреА рдХреЛ Howard Hinnant рдХреЗ рдкреНрд░рд╕рд┐рджреНрдз рдЗрдВрдЯреАрдЬрд░ "days_from_civil" рдЗрдирд╡рд░реНрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЬрд╝рд░рд┐рдП рдХреИрд▓реЗрдВрдбрд░ рддрд╛рд░реАрдЦ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд╛рд▓ рдХреЛ рдорд╛рд░реНрдЪ рд╕реЗ рд╢реБрд░реВ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ leap day рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрдбрд╝реЗ рдФрд░ рдХрд┐рд╕реА рдЕрд▓рдЧ рдирд┐рдпрдо рдХреА рдЬрд╝рд░реВрд░рдд рди рдкрдбрд╝реЗред рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди \((\text{days} + 4) \bmod 7\) рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 1 рдЬрдирд╡рд░реА 1970 рдХреЛ рдЧреБрд░реБрд╡рд╛рд░ рдерд╛ред

$$\text{Days} = \left\lfloor \frac{\text{Timestamp}}{86400} \right\rfloor, \qquad s = \text{Timestamp} \bmod 86400$$

$$\left\{ \begin{aligned} \text{Hour} &= \left\lfloor \frac{s}{3600} \right\rfloor \\ \text{Minute} &= \left\lfloor \frac{s \bmod 3600}{60} \right\rfloor \\ \text{Second} &= s \bmod 60 \\ (\text{Y},\text{M},\text{D}) &= \text{civil}(\text{Days}) \end{aligned} \right.$$

рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдкреВрд░реЗ рджрд┐рдиреЛрдВ рдФрд░ рджрд┐рди рдХреЗ рд╢реЗрд╖ рд╕реЗрдХрдВрдбреЛрдВ рдореЗрдВ рдмрд╛рдБрдЯрд╛ рдЧрдпрд╛
рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ 86400 рд╕реЗ рднрд╛рдЧ рджреЗрдиреЗ рдкрд░ рдкреВрд░реЗ рджрд┐рди рдЙрд╕ рджрд┐рди рдХреЗ рдмрдЪреЗ рд╣реБрдП рд╕реЗрдХрдВрдбреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рд▓ рдХрд┐рдпрд╛ рд╣реБрдЖ рдЙрджрд╛рд╣рд░рдг

рдорд╛рди рд▓реАрдЬрд┐рдП \(ts = 1{,}700{,}000{,}000\): рджрд┐рди = 19675, рдмрд╛рдХреА = 72800 рд╕реЗрдХрдВрдб = 22:13:20ред рдХреИрд▓реЗрдВрдбрд░-рддрд╛рд░реАрдЦ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджрд┐рди 19675 рдХреЛ 2023-11-14 рдкрд░ рдореИрдк рдХрд░рддрд╛ рд╣реИред рддреЛ рдирддреАрдЬрд╛ рд╣реЛрдЧрд╛ 2023-11-14 22:13:20 UTCред

рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╡рд╛рд▓

рдХреНрдпрд╛ рдпрд╣ рдЯрд╛рдЗрдо рдЬрд╝реЛрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ? рдирд╣реАрдВ тАФ рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ UTC рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп рд╕рдордп рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ UTC рдСрдлрд╕реЗрдЯ рдХреЛ рдЬреЛрдбрд╝реЗрдВред (рднрд╛рд░рдд рдХреЗ рд▓рд┐рдП UTC+5:30 рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ IST рдорд┐рд▓ рдЬрд╛рдПред)

рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХрд╛ рдХреНрдпрд╛? рд╕рд┐рд░реНрдл рд╕реЗрдХрдВрдб рд╣реА рдбрд╛рд▓реЗрдВред рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╡рд╛рд▓рд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдЙрд╕реЗ 1000 рд╕реЗ рднрд╛рдЧ рджреЗрдВред

рдпрд╣ leap seconds рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛? Unix time рдЦреБрдж рд╣реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ leap seconds рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдиреНрд╡рд░реНрдЯрд░ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рдЕрдкрдбреЗрдЯ: