日付書式コマンド[閉じる]

日付書式コマンド[閉じる]

ミリ秒が終わったら、次の形式でタイムゾーン値を追加する必要があります。以下の例は次のとおりです。

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

関連情報