2012-03-19 13 views
2

次のコードでmktimeが "-1"を返す理由を理解できますか?ありがとう。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にはタイムゾーンのものもあります)は、文字列の比較が機能するということです(最重要値から最下位に配置されているため)しかし、仕事) –

関連する問題