Треки
/
Bash
Bash
/
Вправи
/
Гігасекунда
Гігасекунда

Гігасекунда

Середня

Вступ

Те, як ми вимірюємо час, досить заплутано. У хвилині 60 секунд, а в годині 60 хвилин. Це прийшло з давнього Вавилону, де число 60 було основою їхньої системи числення. У добі 24 години, у тижні 7 днів, а скільки днів у місяці? Що ж, кількість днів у місяці залежить не лише від того, який це місяць, а й від того, який тип календаря використовують у країні, де ми живемо.

А що, якби для вираження часових проміжків ми використовували лише секунди? Тоді ми могли б застосовувати префікси метричної системи, щоб записувати великі числа секунд у легших для сприйняття величинах.

  • У кулінарному рецепті може бути сказано, що брауні треба пекти в духовці дві кілосекунди (це дві тисячі секунд).
  • Можливо, ми з родиною вирушили б кудись в екзотичні краї на дві мегасекунди (це два мільйони секунд).
  • А якби ми зі своїм подружжям прожили у шлюбі тисячу мільйонів секунд, то відсвяткували б свою першу гігасекундну річницю.
Note

Якщо ми колись колонізуємо Марс чи якусь іншу планету, вимірювання часу стане ще заплутанішим. Коли хтось каже «рік», то має на увазі рік на Землі чи рік на Марсі?

Ідея цієї вправи походить із науково-фантастичного роману "A Deepness in the Sky" автора Вернора Вінґа. У ньому автор використовує метричну систему як основу для вимірювання часу.

Вказівки

Визначте дату й час через один гігасекунд після певної дати.

Гігасекунда - це тисяча мільйонів секунд. Інакше кажучи, це одиниця з девʼятьма нулями після неї.

Якби ми народилися 24 січня 2015 року о 22:00 (10:00:00pm), то 2 жовтня 2046 року о 23:46:40 (11:46:40pm) нам виповнився б один гігасекунд.

Як розвʼязати за допомогою bash

bash не має вбудованих способів розібрати рядки з датою й часом. У цій вправі потрібно звернутися до зовнішньої утиліти.

bash може форматувати дати без будь-яких зовнішніх інструментів. Якщо задано цілочисельне значення часу (секунди від початку епохи), форматувальник printf %()T може застосувати форматування у стилі «strftime».

epoch=1234567890

printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-13 18:31:30

# bash uses the `TZ` environment variable for the timezone.

TZ=Asia/Kolkata printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-14 05:01:30
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Bash Exercism

Час розпочати Гігасекунда?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Bash, а також 97 вправ та справжнє наставництво від людей, і все це безкоштовно.