![日付書式コマンド[閉じる]](https://linux33.com/image/136138/%E6%97%A5%E4%BB%98%E6%9B%B8%E5%BC%8F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
ミリ秒が終わったら、次の形式でタイムゾーン値を追加する必要があります。以下の例は次のとおりです。
2018-01-07T14:30:03.832-0700
必要な形式を取得するにはUnixコマンドが必要です。
答え1
GNUまたはast-openを使用してくださいdate
。
$ date +%FT%T.%3N%z
2018-07-01T13:44:07.043+0100
(GNU date
(GNUではない)は、for、for 1、および//(必要に応じて追加)もstrftime
サポートします。%:z
+01:00
%::z
+01:00:00
%:::z
+01
+01:30
+01:30:01
:xx
存在するksh93
:
$ printf "%(%FT%T.%3N%z)T\n"
2018-07-01T13:44:07.043+0100
存在するzsh
:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME | IFS=. read s ns
$ strftime %FT%T.$ns[1,3]%z $s
2018-07-01T13:44:07.043+0100
移植性を持たせるには(ここで難しい部分はミリ秒です。たとえば、%z
標準²機能をラップするstrftime()
すべての項目から取得できるタイムゾーンオフセットではありませんdate
)、次のことを試すことができますperl
。
perl -MTime::HiRes=gettimeofday -MPOSIX -le '
($s, $us) = gettimeofday;
$ms = sprintf("%03d", $us/1000);
print strftime "%FT%T.$ms%z", localtime $s'
1はい、TZオフセットは、のようにゼロ以外の秒にすることができますTZ='OFF00:00:01' date '+%Z %::z'
。実際のタイムゾーンの場合、これは遠い(Unixより前の)時刻の日にのみ機能します。たとえば、参照してください。TZ=Europe/Amsterdam date -d '90 years ago' '+%F %::z'
²しかし、%F
および%z
はPOSIX strftime()
(少なくともSUSv3ベース)で指定されていますが、ユーティリティのPOSIX仕様にはありません(ただし、それをサポートしていないdate
現在のシステムはありません)。date
答え2
%z
時間形式に追加してください。例:
$ date
Sun Jul 1 04:55:02 EDT 2018
$ date '+%z'
-0400
$
答え3
ISO8601時間形式はGNU Dateを使用して取得できます。
$ date -Iseconds
2018-07-01T06:57:25-0700
ただし、時間をミリ秒単位で取得するには、詳細な文字列を指定する必要があります。努力する:
$ date +'%Y-%m-%dT%H:%M:%S.%3N%z'
2018-07-01T06:57:28.457-0700