Как добавить число X года в формат ГГГГММДДЧЧММСС в bash?

У меня была та же проблема, я взял пакет из Testing с той же основной версией, что и текущая, но без тега ~deb9u1:

$ apt list chromium -a
Listing... Done
chromium/testing,now 67.0.3396.87-1 amd64 [installed]
chromium/stable 67.0.3396.87-1~deb9u1 amd64
chromium/stable 62.0.3202.89-1~deb9u1 amd64

Кажется, это решило мои проблемы. Видео на Flickr теперь работают, уведомления в браузере Hangouts работают, уведомления на веб-страницах работают... Разочаровывает то, что кто-то может изменить что-то настолько важное, и это доходит до основных репозиториев-_-

2
27.08.2020, 21:15
3 ответа

Возможно, я слишком -упрощаю, но:

% expr 20091005000000 + 10000000000
20101005000000
4
18.03.2021, 23:09

Вы можете просто рассматривать строку как число:

#/bin/sh
date='20000229000000'
echo "$((date + 10000000000))"

, который печатает 20041005000000. Конечно, это не работает правильно, если ваша дата приходится на 29 февраля високосного года, но это должно быть единственным исключением. Вы можете справиться с этим, разделив строку на части и взяв високосный день как частный случай :

.
#!/bin/bash
date='20000229000000'
# assume it's correctly formatted
y=${date:0:4}
m=${date:4:2}
d=${date:6:2}
t=${date:8}

if [[ $m == 02 && $d == 29 ]]; then
        m=03
        d=01
fi

echo "$((y+1))$m$d$t"

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

4
18.03.2021, 23:09

Мне не нравится этот ответ, потому что для этого он вызывает 3 команды оболочки, но он работает. Начните сmyDate="20031005010203"

Я предполагаю, что вы хотите добавить к этому 1 год. Некрасивый способ — разобрать его, обработать первые 8 символов как ГГГГММДД, добавить год и использовать команду даты для форматирования результата. Он сшивает время обратно на значение времени. Обратите внимание, что для моих тестовых данных я использую 20040229 (допустимый високосный год ).

myDate="20040229010203"
datebit=$(echo $myDate | cut -c 1-8)
timebit=$(echo $myDate | cut -c 9-)
newdate=$(date -d "$datebit +1 year" +"%Y%m%d${timebit}")
echo "${newdate}"

Ввод был 20040229010203, а вывод должен быть 20050301010203.

Таким образом, «один год с 01 :02 :03 29 февраля 2004 года» равен «01 :02 :03 01 марта 2005 года»

Я проверил это на Ubuntu с помощью стандартной команды date.

1
18.03.2021, 23:09

Теги

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