Вывод даты в ожидаемом формате между двумя датами

Обычно сначала нужно проверить название канала:

$ nix-channel --list
nixpkgs https://nixos.org/channels/nixpkgs-unstable

Как только вы узнаете имя канала, в данном случае nixpkgs, вы можете приступить к установке:

$ nix-env -iA nixpkgs.google-chrome
installing ‘google-chrome-64.0.3282.186’
..................

Кроме того, вы можете выполнить поиск по полному имени перед выполнением установки:

$ nix-env -qaP google-chrome                                                                                                                               
nixpkgs.google-chrome  google-chrome-64.0.3282.186
0
07.02.2020, 11:25
2 ответа
#!/bin/bash

timestamp=$( date -d '2017-01-01 12:00' +%s )

while [ "$thedate" != '31/12/2019' ]; do
        printf -v thedate '%(%d/%m/%Y)T' "$timestamp"
        timestamp=$(( timestamp + 86400 ))

        printf '%s\n' "$thedate"
done

Приведенный выше сценарий сначала использует GNU dateдля получения метки времени UNIX для полудня начальной даты (, она будет1483268400). Затем он повторяется до тех пор, пока не будет найдена и выведена конечная дата. На каждой итерации мы увеличиваем timestampна 86400 секунд (24 часа ).

Строки даты создаются с помощью встроенной -в printfутилиты в bash, которая способна форматировать строку даты и времени из временной метки UNIX с ее форматом %(...)T(для этого требуется bashверсия 4.3 или более поздняя ). Он также печатает непосредственно в переменную thedateс -v.

В некоторых системах без GNU dateвы могли бы получить метку времени начала с помощью встроенной утилиты date, используя другой формат аргументов командной строки. В OpenBSD, например, это делается с помощью

date -j +%s 201701011200

См. man dateдля вашего конкретного Unix.

Также можно использовать некоторые расширенные реализации awk.:

awk 'BEGIN { print mktime("2017 01 01 12 00 00") }'

Но если у вас есть такойawk(GNU awkили mawk), то вы можете сделать все это вawk:

awk '
BEGIN {
        timestamp = mktime("2017 01 01 12 00 00")

        while (thedate != "31/12/2019") {
                thedate = strftime("%d/%m/%Y", timestamp)
                timestamp += 86400

                print thedate
        }
}'
1
28.04.2021, 23:24

Вам потребуется добавить вложенный цикл for -с первой итерацией для года и следующего -месяца. для каждого месяца вы будете делать то, что уже сделали, печатая месяц и год в конце awk.

-2
28.04.2021, 23:24

Теги

Похожие вопросы