2014-01-31 2 views
0

Я пытаюсь преобразовать дату, хранящуюся в переменной, в временную метку unix. У меня есть значение, я должен предоставить формат этого значения («% m% d% Y»), а затем преобразовать его («% s»). Не могли бы вы дать мне подсказку?Преобразование даты хранимой переменной в unix time BASH

>initial_date=02012014 
>date_2_unixtime=`date +"%m%d%Y" -d $initial_date +"%s"` 
date: extra operand `+%s' 
Try `date --help' for more information. 

Спасибо

ответ

0

Ваша дата в mmddyyyy, она должна быть в yyymmdd для date интерпретировать. Кроме того, вы не предоставляете команду ввода даты и даты. Формат предназначен только для показа.

Используйте это следующим образом:

initial_date=02012014 
dt="${initial_date:4}${initial_date:0:4}" 
date +"%s" -d "$dt" 
1391230800 
+0

, что мне интересно: почему ваш выход '1391230800' вместо' 1391209200'? – Kent

+0

@Kent: смещение временной зоны :) Мои часы были установлены для EDT, что на 6 часов ниже UTC. – anubhava

+2

@ Kent, я думаю, anubhava происходит из будущего :) – fedorqui

0

проблема, вы должны преобразовать initial_date в формат, который date признает.

02012014 не является одним из них, к сожалению.

kent$ date -d "02012014" 
date: invalid date ‘02012014’ 

если вы предпочитаете один вкладыш, вы можете попробовать:

date -d $(sed -r 's#(..)(..)(....)#\1/\2/\3#' <<<$initial_date) +%s 
1391209200 
+0

Вы имеете в виду '\ 3 \ 2 \ 1'? –

+0

'1/2/3' и' 321' оба работа @glennjackman – Kent

+0

работает отлично. Да благословит вас Бог! – user3253335

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