ウェブサイト検索

date コマンドを使用して Bash で日付と時刻を操作する方法


Date コマンドは、システムの日付と時刻を設定または表示できる外部 bash プログラムです。また、いくつかの書式設定オプションも提供します。 Date コマンドは、デフォルトですべての Linux ディストリビューションにインストールされます。

which date
type -a date

ターミナルにdate コマンドを入力すると、現在の日付と時刻が表示されます。

date

Linux システムの日付と時刻を変更する

date コマンドを使用すると、システムの日付、時刻、およびタイムゾーンを変更できます。変更はハードウェア クロックと同期する必要があります。

date --set="Thu Nov 12 13:06:59 IST 2020"
hwclock --systohc

書式設定オプション

書式設定オプションのリストを取得するには、マニュアル ページが最適です。

man date

使用する最も一般的な書式設定オプションをいくつか見てみましょう。

  • 書式設定を適用するには、「+」の後に「フォーマッタ」を使用します。
  • GNU\LINUX のフォーマット オプションのリストを取得するには、リンクされたマニュアル ページを参照してください。
  • BSD のフォーマット オプションのリストを取得するには、リンクされたマニュアル ページを参照してください。

日付コマンドの 2 つの重要な部分は、形式 +% と –date オプションを使用することです。

次に、日付コマンドに書式設定を適用しましょう。書式設定を適用するには、例に示すように、プラス記号 (+) の後に %formatter を追加します。

Linux での日付の処理

date.sh」という単純なシェル スクリプトで日付関連のフォーマッタを使用する方法を見てみましょう。

PRINT YEAR,MONTH,DAY AND DATE...

echo "We are in the year = $(date +%Y)"
echo "We are in the year = $(date +%y)"

Difference between %Y and %y is %Y will print 4 digits while %y will print the last 2 digits of the year.

echo "We are in the month = $(date +%m)"
echo "We are in the month = $(date +%b)"
echo "We are in the month = $(date +%B)"

Difference between %B and %b is, %B will print full month name while %b will print abbreviated month name.

echo "Current Day of the month = $(date +%d)"

echo "Current Day of the week = $(date +%A)"
echo "Current Day of the week = $(date +%a)"

Difference between %A and %a is, %A will print full Weekday name while %a will print abbreviated weekday name.

Instead of formatting to get the date, we can use %D which will print the date as %m/%d/%y or %F which prints in %Y-%M-%d format.

echo "Date using %D = $(date +%D)"
echo "Date using %F = $(date +%F)"

Linux での処理時間

time.sh」という単純なシェル スクリプトで時間関連のフォーマッタを使用する方法を見てみましょう。

PRINT HOURS, MINS, SECONDS, NANO SECONDS

echo Hours = $(date +%H)
echo Minutes = $(date +%M)
echo Seconds = $(date +%S)
echo Nanoseconds = $(date +%N)
echo Epoch Time = $(date +%s)

echo "current time = $(date +%H:%M:%S:%N)"

can also use %T which displays Time in HH:MM:SS format.

echo "current time in 24 hour format = $(date +%T)"

can also use %r to display time in 12 hour format.

echo "current time in 12 hour format = $(date +%r)"

-date または -d フラグを使用する場合

--date または -d フラグを使用すると、入力を文字列として渡すことができ、date コマンド はそれをスマートに処理することを認識します。

それがどのように機能するかを理解するために、いくつかの例を見てみましょう。

Print yesterday's date and time.
echo "Yesterday = $(date -d "Yesterday")"

Print Tomorrow date and time.
echo "tomorrow = $(date -d "tomorrow")"

Find what is the date and time before 10 days from now.
echo "Before 10 days = $(date -d "tomorrow -10 days")"

Find last month and next month
echo "Last month = $(date -d "last month" "%B")"
echo "Next month = $(date -d "next month" "%B")"

Find last year and next year
echo "Last Year = $(date -d "last year" "+%Y")"
echo "Next Year = $(date -d "next year" "+%Y")"

Forecast the weekday
echo "2 days away from today and it comes on weekdays? = $(date -d "Today +2 days" "+%A")

共通の操作

指定された 2 つの日付の間の日数を計算します。

echo $(( ( $(date -d "2020-11-10" "+%s") - $(date -d "2020-11-01" "+%s") ) / 86400))

指定された年がうるう年かどうかを調べます。

for y in {2000..2020}; do date -d $y-02-29 &>/dev/null && echo $y is leap year; done

date コマンドの出力を変数に代入します。

TODAY=$(date +%Y-%m-%d)
OR
TODAY1=$(date +%F)
echo $TODAY 
echo $TODAY1

ファイル名に日付を追加したログ ファイルを作成します。

ログ ファイル、バックアップ、またはテキスト ファイルの作成時に日付と時刻を追加することは、最も頻繁に遭遇する一般的な操作です。例として、バックアップを取るためにシェル スクリプトを作成しました。

このスクリプトは、00:00 から 23:59 までバックアップを取得し、毎日翌日の 00:00 に実行されるようにスケジュールされます。昨日の日付形式でログ ファイルを作成したいと考えています。

CUSTOM_FORMAT=$(date --date "Yesterday" "+%d-%y-%H:%M")
LOG_FILE=/var/log/custom_application/application_${CUSTOM_FORMAT}.log
echo "Script started" >>  ${LOG_FILE}
...
CODE BLOCKS
...
echo "Script completed" >> ${LOG_FILE}

この記事はここまでです。この記事では、Linux で bash の日付と時刻を使用する方法について説明しました。フィードバックをお聞かせください。