Armadilloフォーラム

date -u -d 19700101 について

nemo

2017年5月7日 20時29分

何時もお世話になっております。
根本です。

Armadillo-240を使用しております。
Armadillo-240のdateコマンドについて教えて頂きたいのですが。

date -u -d 19700101 '+%s'  のリターンが0になると思っていたのですが
0にならないのいですが何故でしょうか?

date -d の結果が期待と違う値になってしまうのですが
何故なおでしょうか。(date -u と date -u '+%s'は問題ないのですが)

以下の様な結果になってしまいます。

[root@armadillo420-0 (ttymxc1) ~]# date -u
Thu Jan 1 00:01:34 UTC 1970
[root@armadillo420-0 (ttymxc1) ~]# date -u '+%s'
104
[root@armadillo420-0 (ttymxc1) ~]# date -u -d 19700101 '+%s'
53139660
[root@armadillo420-0 (ttymxc1) ~]# date -u -d 19700101
Wed Sep 8 01:01:00 UTC 1971

初歩的な事で申し訳ありません
教えて頂けたら嬉しいです。

                   以上

コメント

根本です。

大変申し訳ありません。
使用製品名を間違えました。

Armadillo 420 を使用しております。

            以上

> 何時もお世話になっております。
> 根本です。
>
> Armadillo-240を使用しております。
> Armadillo-240のdateコマンドについて教えて頂きたいのですが。
>
> date -u -d 19700101 '+%s'  のリターンが0になると思っていたのですが
> 0にならないのいですが何故でしょうか?
>
> date -d の結果が期待と違う値になってしまうのですが
> 何故なおでしょうか。(date -u と date -u '+%s'は問題ないのですが)
>
> 以下の様な結果になってしまいます。
>
> [root@armadillo420-0 (ttymxc1) ~]# date -u
> Thu Jan 1 00:01:34 UTC 1970
> [root@armadillo420-0 (ttymxc1) ~]# date -u '+%s'
> 104
> [root@armadillo420-0 (ttymxc1) ~]# date -u -d 19700101 '+%s'
> 53139660
> [root@armadillo420-0 (ttymxc1) ~]# date -u -d 19700101
> Wed Sep 8 01:01:00 UTC 1971
>
>
> 初歩的な事で申し訳ありません
> 教えて頂けたら嬉しいです。
>
>                    以上
>

中村です。

ヘルプを見ると・・・
-d STRING Displays time described by STRING, not `now'
となっていて、どういう書式が受け付けられるのかわかりません。

ソースを見てみました。busybox-1.00です。

        nr = sscanf(t_string, "%2d%2d%2d%2d%d", &(tm_time->tm_mon),
                                &(tm_time->tm_mday), &(tm_time->tm_hour), &(tm_time->tm_min),
                                &(tm_time->tm_year));

"-d"がある場合も、"-d"なしで指定する場合も、
これでパースされるようです。

date -h で表示される
Usage: date [OPTION]... [MMDDhhmm[[CC]YY][.ss]] [+FORMAT]
と同じMMDDhhmmCCYYです。

# date -u -d 010100001970 '+%s'
0
# date -u -d 010100001970
Thu Jan 1 00:00:00 UTC 1970

> > [root@armadillo420-0 (ttymxc1) ~]# date -u -d 19700101
> > Wed Sep 8 01:01:00 UTC 1971

これがどのように解釈されたのかというと・・・・
左端から2桁ずつ、月、日、時、分、残りが年ですから、
19月70日01時01分で、年はナシです。

19月⇒1年+7月
70日⇒2ヶ月+数日(何月にするかで日数が違います)
これを現在年の1970年に適用して
1971年9月8日となったようです。

ちなみに、現在年月日が2017年の今日になっている場合に
"19700101"で指定すると、次のようになります。
# date 050721552017
Sun May 7 21:55:00 UTC 2017
# date -u -d 19700101
Sat Sep 8 01:01:00 UTC 2018

--
なかむら

根本です。

中村様詳しい説明ありがとうございます。
納得致しました。
date もオプションが減っている以外にも違う点があるのですね。
Debianで作成したシェルがArmadilloで上手く動かなかったためパニックってしまいました。
ありがとうございました。

他のコマンドも違いがあった時には
-h をよく読み。それで分からない時にはソースを読む様にします。

ありがとうございました。