1

http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/usr.bin/tar/Attic/getdate.y?rev=1.9.12.1;content-type=text%2Fplain;hideattic= 0

私はyyTimezone以下のコードでどのように計算されるかを理解しようとしています:

| bare_time  '+' tUNUMBER {
    /* "7:14+0700" */
    yyDSTmode = DSToff;
    yyTimezone = - ($3 % 100 + ($3 / 100) * 60);
}
| bare_time '-' tUNUMBER {
    /* "19:14:12-0530" */
    yyDSTmode = DSToff;
    yyTimezone = + ($3 % 100 + ($3 / 100) * 60);
}

私が理解しているのは、タイムスタンプが2011-01-02T10:15:20-04:00;であるとしましょう。これは、その0400時間が遅れていることを意味しUTCます。したがって、に変換するにUTCは、それに時間を追加0400すると、になり2011-01-02T14:15:20ます。私の理解は正しいですか?

上に貼り付けたコードブロックでそれはどのように達成されますか?

4

1 に答える 1

3

入力は、のようにオフセットをエンコードし-0400ます。その0400一部はtUNUMBERトークンとして返されます(おそらく符号なしの値を保持します)。このトークンは文法規則と一致し、として使用できます$3

値から実際のオフセットを分単位で取得するには、400最初にそれを2つに分割する必要があります。$3 / 100時間の部分は(ie。 )で取得でき4、分の部分は$3 % 100(ie。0)で取得できます。1時間には60分があるので、時間を60で乗算し、それに分を加算すると($3 % 100 + ($3 / 100) * 60)、値が得られます240。あとは、記号を追加してに保存するだけですyyTimezone

その後yyTimezone、分単位のタイムゾーンオフセットが含まれます。

于 2011-08-25T06:22:29.430 に答える