2012-03-19 2 views
2

Может кто-нибудь помочь мне понять, почему я получаю «-1», возвращаемый mktime в следующем коде. Благодарю.awk: mktime возвращает -1

#!/usr/local/bin/bash 
f_name="crap.stat" 
S_Date="2012-02-10" 
E_Date="2012-02-13" 

gawk -F '\t' -v s_date="$S_Date" -v e_date="$E_Date" 'BEGIN {s_time = mktime(s_date);e_time = mktime(e_date);print s_time, e_time}' $f_name 

ответ

4

Вы должны использовать определенный формат для этой функции. Вот ваш код исправлено:

#!/usr/local/bin/bash 
f_name="crap.stat" 
S_Date="2012-02-10" 
E_Date="2012-02-13" 

gawk -F '\t' -v s_date="$S_Date" -v e_date="$E_Date" ' 
    BEGIN { 
    gsub(/-/, " ", s_date); 
    s_date = s_date " " 00 " " 00 " " 00; 
    s_time = mktime(s_date); 
    gsub(/-/, " ", e_date); 
    e_date = e_date " " 00 " " 00 " " 00; 
    e_time = mktime(e_date); 
    print s_time, e_time 
    } 
' $f_name 

Результат:

1328828400 1329087600 

Он должен быть в следующем формате: YYYY MM DD HH MM SS[ DST], поэтому я заменяю - с пробелами и добавлять нули в течение времени.

+0

мой файл данных имеет формат $ Date $ val и $ Date в формате "yyyy-mm-dd", поэтому мне нужно mktime, чтобы генерировать дату в этом формате для сравнения –

+0

Спасибо, сравнение работало даже без использования mktime, странный? –

+0

@ShuvoShams: Одно из достоинств ISO8601-подобного (в ISO8601 также есть материал часового пояса) - это то, что сравнение строк работает ... (поскольку оно составлено от наиболее значимого до наименее значимого) (Ведущие нули необходимы для сравнения строк с работа хотя) –