Преобразование даты в число секунд или дней

Либо ls, либо grepдобавляются цветовые коды; вероятно, где-то есть псевдоним, включающий --color=always. (Что касается вашего вопроса -, все активные псевдонимы отображаются при запуске alias.)

В любом случае парситьlsне следует. Используйтеfind(вариант GNU )вместо:

find. -maxdepth 1 -regextype posix-extended -regex '.*/file[1-9]{2,3}.txt' -delete

(Вы также должны изменить свой псевдоним, чтобы использовать --color=auto.)

0
06.01.2021, 18:19
2 ответа

Дата эпохи фиксирована. Поскольку вам нужно будет выполнять операции с 1950 года, это возможно для 32-битного времени Unix.

Даже если число отрицательное, вы можете сложить две точки.

С 1950 по 1970 + С 1970 по настоящее время:

#Get the current date time timestamp
d1="$(date +%s)"
#Get the timestamp from <date> to 1970 and remove negative sign
d2="$(date +%s --date "10 March 1950" | sed 's/-//g')"
#Perform addition of both timestamps
res="$((d1+d2))"
echo "$res"  # Output 2235228403
2
18.03.2021, 22:38

Другой подход :начинается с 1950 года, за 0 дней до него, и просто добавляется количество дней для каждого года в качестве начального -значения выключения. Как это может выглядеть:

Создать массив с суммой дней за предыдущие годы для каждого года:

#!/bin/bash
ndays[1950]=0
for i in {1951..2020} ; do
    ndays[i]=$(( ${ndays[i-1]}+$(date +%j --date "31 dec $((i-1))" ) ))
done
  

Теперь ваш новый идентификатор дня представляет собой просто начальное значение (суммы дней за все предыдущие годы с 1950 года )и дня года текущей даты.

date="22 May 1975"
year=$(cut -d' ' -f3 <<<$date)
dayID=$(( ${ndays[year]} + $(date --date "$date" +%-j) ))

(Примечание :обязательно используйте %-j, а не %j, иначе bash будет рассматривать первые 99 дней года как восьмеричные значения из-за ведущего 0.)

2
18.03.2021, 22:38

Теги

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