2

"Fri, 13 Sep 2013 17:16:45 GMT"などの RSS 日付形式を取り、それをミリ秒に変換するbash 行をお探しですか?

以下のように、ミリ秒単位で生成されないことを試しました。Mac OS X Snow Leopard 10.6.8 を実行しています。

  524  date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT"
  525  date +%s -d "Fri 13 Sep 2013 17:16:45 GMT"
  526  date +%s -d "Fri 13 Sep 2013 17:16:45"
  527  date +%s -f "Fri, 13 Sep 2013 17:16:45 GMT"
  528  date +%s -f "Fri, 13 Sep 2013 17:16:45 GMT"
  514  date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT"
  515  date +%s -d "Fri, 13 Sep 2013 17:16:45"
  516  date +%s -ud "Fri, 13 Sep 2013 17:16:45 GMT"
  517  date +%s -ud "Fri, 13 Sep 2013 17:16:45"
  512  date -d "Fri, 13 Sep 2013 17:16:45 GMT" "+%s"
4

4 に答える 4

1

RSS 日付には小数秒がありますか?

そうでない場合は、BSD 日付を使用します (つまり、Mac OS X):

echo $(date -j -f "%a, %d %b %Y %H:%M:%S" "Fri, 13 Sep 2013 17:16:45" +%s)000

または、Mac OS X のマンページによると:

echo $(date -j -f "%a, %d %b %Y %H:%M:%S %Z" "Fri, 13 Sep 2013 17:16:45 GMT" +%s)000

GNU date がある場合は、次のかなり単純な式が機能します。

echo $(date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT")000

または、これを使用することもできます。これは、元の時間文字列の小数秒で機能します。

echo $(($(date +%s%N -d "Fri, 13 Sep 2013 17:16:45.126 GMT")/1000000))
于 2013-09-13T19:21:15.140 に答える
0

awk を使用して、出力の最後にゼロを 3 つ追加して、ミリ秒単位にすることができます。

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | awk '{print $0"000"}'

または sed を使用して同じことを行います:

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | sed -e "s|.*|&000|g"

上記は Mac OS X Lion では機能しません。GNU dateMacPorts の coreutil パッケージにあるものをインストールする必要があります。その後、 が得られgdateます。

代わりにpython、これを行うために使用できます:

python -c'import time; print "%f" % (time.mktime(time.gmtime())*1000.)'
于 2013-09-13T19:23:13.030 に答える
0

date コマンドは、[s] 単位で時刻を表示します。その解像度で問題ない場合は、3 つのゼロを追加するだけです。

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | sed 's/..*/&000/'

そうでない場合は、システム コール を使用して C プログラムを作成する必要がありますgettimeofday()。それを呼びましょうgettimeofday.c

#include <sys/time.h>                                
#include <stdio.h>                                   
int main(void)                                       
{                                                    
        struct timeval t;                            
        gettimeofday(&t, NULL);                      
        printf("%d%d\n", t.tv_sec, t.tv_usec / 1000);
        return 0;                                    
}                                                    

コンパイルするには、gcc と make が必要です。

make gettimeofday

その後:

./gettimeofday

よく考えてみると、与えられた日付を Unix 時間に変換したいので、私の小さなプログラムはまったく役に立ちません。でも素敵なので置いておきます。:-)

于 2013-09-13T19:19:46.123 に答える