Вопрос по string, date, unix, bash, shell – Конвертировать строку в дату в bash

21

У меня есть строка в формате "ггггммдд". Это строка в bash, и я хочу преобразовать ее в дату, чтобы можно было использовать все остальные функции даты.

& Quot; 20121212 & Quot; строка в & quot; 20121212 & quot; дата в формате & quot;% Y% m% d & quot ;.

Скажи, что я хочу добавить 7 дней к дате. Я думаю, что это можно сделать на Bash. Это не просто целочисленное сложение. Yahoo-Me
@bash нет типа даты. О каких «всех других функциях дат» вы говорите? Thomas
Возможная копия Редкая дата в Баше Dave Jarvis

Ваш Ответ

4   ответа
25

Это сработало для меня:

date -d '20121212 7 days'
date -d '12-DEC-2012 7 days'
date -d '2012-12-12 7 days'
date -d '2012-12-12 4:10:10PM 7 days'
date -d '2012-12-12 16:10:55 7 days'

затем вы можете отформатировать вывод, добавив параметр '+% Y% m% d'

Поддерживает ли конвертацию даты из ISO-8601 CMCDragonkai
@ CMCDragonkainow=$(date -Im) сохраняет текущее время как дату / время с точностью до минуты ISO-8601, аdate -d = $now доволен этим форматом. Однако я не уверен, что то же самое обязательно для всех вариантов, совместимых с ISO-8601. mc0e
Это, безусловно, полезно, и gnu date также выполняет конвертацию часовых поясов, но есть много других задач, связанных с манипулированием датами. Например. Разница между датами для получения интервала; Округление дат и интервалов с заданной точностью (округление в меньшую сторону, округление в большую сторону и округление до ближайшего значения) или дальнейшее растяжение, как найти дату в 10 рабочих днях от даты X (учитывая выходные дни в данной стране) , Есть ли более всеобъемлющий инструмент, подходящий для использования в сценариях? mc0e
@ mc0e Только те, о которых я знаю, являются языковыми библиотеками, а не исполняемыми файлами CLI. Возможно, можно было бы обернуть их в двоичный файл CLI. Как Момент в JS и некоторых других. CMCDragonkai
@ CMCDragonkai Да, я думал, что завершение существующей библиотеки с помощью CLI кажется хорошей идеей. Тем не менее, читаяэт стоит, прежде чем кто-то запрыгнет слишком быстро. Вероятно, лучшим решением будет CLI вокруг библиотеки C или C ++, если есть подходящий. mc0e
9

1) Измените формат на «% Y-% m-% d», т. Е. С 20121212 на 2012-12-12

date -d '20121212' +'%Y-%m-%d'

2) Получить на следующий или последний день от данной даты = 20121212. Как получить дату 7 дней в прошлом с определенным форматом

date -d '20121212 -7 days' +'%Y-%m-%d'

3) Если мы получаем дату в некоторой переменной, скажем, dat

dat2=$(date -d "$dat -1 days" +'%Y%m%d')
i точно искал решение номер 3, спасибо @ minhas23 Abu Shoeb
3

для OS X, два варианта:

change команда (подтверждено)

#!/bin/sh
#DATE=20090801204150
#date -jf "%Y%m%d%H%M%S" $DATE "+date \"%A,%_d %B %Y %H:%M:%S\""
date "Saturday, 1 August 2009 20:41:50"

http: //www.unix.com/shell-programming-and-scripting/116310-date-conversion.htm

Загрузите утилиты GNU из Coreutils - утилиты ядра GNU (еще не проверено)http: //www.unix.com/emergency-unix-and-linux-support/199565-convert-string-date-add-1-a.htm

2

просто используйте параметр -d команды date, например

date -d '20121212' +'%Y %m'

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