2012-06-21 4 views
18

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

«20121212» строка в «20121212» с форматом «% Y% m% d».

+1

баш не имеет тип даты. Каковы эти «все другие функции даты», о которых вы говорите? – Thomas

+1

Скажем, я хочу добавить 7 дней к дате. Я думаю, что это можно сделать в битве. Это не просто целое дополнение вообще. –

+0

Возможный дубликат [Дата синтаксиса в Bash] (http://stackoverflow.com/questions/1842634/parse-date-in-bash) –

ответ

23

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

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% м% D'

+0

Поддерживает ли поддержка даты от ISO-8601 – CMCDragonkai

+0

@CMCDragonkai 'now = $ (date - Im) 'хранит текущее время как дату/время ISO-8601 до минимальной точности, а' date -d = $ now' доволен этим форматом. Я не уверен, хотя, если то же самое верно для всех вариантов, совместимых с ISO-8601. – mc0e

+0

Это, безусловно, полезно, и дата gnu также делает такие вещи, как преобразование часовых поясов, но есть много других задач манипулирования датами, которые могут потребоваться. Например. Разница между датами, чтобы получить интервал; Округление как дат, так и интервалов с заданной точностью (округление, округление и округление до ближайшего) или дальнейшее растяжение, как бы найти дату в 10 рабочих дней с даты X (учитывая праздники в данной стране) , Есть ли более полный инструмент, подходящий для использования скриптов? – mc0e

1

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

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

Мы можем использовать дату -d опция

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

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

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

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

3) Если мы получаем дату в некоторых переменном сказать Даты даты

dat2=$(date -d "$dat -1 days" +'%Y%m%d') 
+0

Я точно искал решение номер 3, благодаря @ minhas23 –

2

работать только с датой GNU (обычно поставляется с Linux)

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

  1. команда изменения (проверено)

    #!/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.html

  2. Скачать GNU утилиты от Coreutils - ядро ​​GNU утилиты (еще не проверено) http://www.unix.com/emergency-unix-and-linux-support/199565-convert-string-date-add-1-a.html

Смежные вопросы