Bashを使用してタイムスタンプをUnix epoch時間に変換する方法

Bashを使用してタイムスタンプをUnix epoch時間に変換する方法

次のようなタイムスタンプがあります。2022-11-09T14:41:15.555641007Z

次のようにUnix epoch時間(秒)に変換したいと思います。1668005090

次の方法でどのようにこれを達成できますか?

答え1

次のように(GNUまたはast-openの実装を前提としてdate):

$ date -d '2022-11-09T14:41:15.555641007Z' +%s
1668004875

答え2

macOSでは、入力がUTCとして知られていると仮定しています。

% t='2022-11-09T14:41:15.555641007Z';
% date -j -f "%Y-%m-%dT%H:%M:%S%z" "${t%.*}+0000" +%s                          
1668004875

期待どおりに${t%.*}+0000ナノ秒とマーキングを削除し、タイムZゾーンマーキングを追加します。+0000%z

UTCでない場合は、以前の形式に変換して使用する必要があります。2022-11-09T14:41:15+hhmmdate -j -f "%Y-%m-%dT%H:%M:%S%z" "$t" +%s

オプションは次のとおりです。FreeBSDバージョンdate似ているようで、ここにも適用できます。

関連情報