strftimeとは?strftimeの使い方をPHP・Python・Rubyの3つの言語で解説!

- システム
エンジニア - strftimeを使うメリットとはなんでしょう?
- プロジェクト
マネージャー - 時刻を指定のフォーマットに変換できることがメリットして挙げられます。
strftimeとは?
strftimeとは文字列関連の関数の一つで、時刻の時間表記をフォーマットするために使用します。同じ名前の関数がPHP、Python、Rubyにありますが、この記事ではそれぞれについて全て解説します。
まずはPHPのstrftimeです。以下のように使用します。
1
2
3
|
echo strftime(“%Y/%m/%d %H:%M:%S”) . '<br>';
echo strftime(“%B, %d(%A)”);
|
PHPのstrftime
実行結果は以下のようになります。
2021/02/17 15:07:00
February, 17(Wednesday)
strftime(“%Y/%m/%d %H:%M:%S”) の%Yは現在の西暦、%mは現在の月、%dは現在の日付、%Hは現在の時の24時間表記、%Mは現在の分、%Sは現在の秒です。strftime(“%B, %d(%A)”)の%Bは現在の月の英語名、%Aは曜日の英語名です。
より簡単な表記法
PHPのstrftimeは以下のような使い方もできます。
1
2
3
|
echo strftime(“%D %T”) . '<br>';
echo strftime(“%x %X”);
|
実行すると以下のように表示されます。
02/17/21 15:31:15
02/17/21 15:31:15
strftime(“%D %T”)の%Dは%m/%d/%y、%Tは%H:%M:%Sと同じです。またstrftime(“%x %X”)の%xは日付、%Xは時刻を表示します。
strtotimeと組み合わせて使える
PHPのstrftimeは現在の時刻を扱うだけでなく、2つ目のパラメータにUNIXタイムスタンプの特定の日付を指定できます。そこでUNIXタイムスタンプを返すstrtotimeと組み合わせれば、以下のようなことができます。
1
2
3
4
5
|
echo strftime(“%x”, strtotime(“now”)) . “<br>”;
echo strftime(“%x”, strtotime(“+1 day”)) . “<br>”;
echo strftime(“%x”, strtotime(“+1 week”)) . “<br>”;
echo strftime(“%x”, strtotime(“next Monday”)) . “<br>”;
echo strftime(“%x”, strtotime(“last Wednesday”));
|
strftimeとstrtotimeで様々なことが出来る
上のサンプルの結果は以下になります。
02/17/21
02/18/21
02/24/21
02/22/21
02/10/21
2021年2月17日水曜日を起点として、翌日・翌週・次の月曜日・前の水曜日の日付を表示しています。PHPのstrftimeとstrtotimeを組み合わせれば、このように色々な使い方ができるということです。
Pythonのstrftime
次はPythonのstrftimeの解説です。Pythonでは以下のようにdatetimeオブジェクトのメソッドとしてstrftimeを使用します。
1
2
3
4
5
|
import datetime
dt = datetime.datetime.now()
print(dt.strftime('%Y/%m/%d %H:%M:%S'))
print(dt.strftime('%Y %B %d(%A)'))
|
実行すると以下のように表示されます。
2021/02/17 10:34:43
2021 February 17(Wednesday)
日時をint型で取得する
strftimeで文字列ではなく数値として日付などを取得したい場合は、以下のようにint()で得ることができます。
1
2
3
4
5
6
7
8
|
import datetime
dt = datetime.datetime.now()
month = int(dt.strftime('%m'))
print(month)
print(type(month))
day = int(dt.strftime('%d'))
print(day)
|
実行すると以下のように表示されます。type()でint型になっているのがわかります。
2
<class ‘int’>
17
timedeltaで一定間隔の日付リストを作れる
以下のように時間の間隔を示すtimedeltaオブジェクトと組み合わせると、strftimeで一定間隔の日付リストを作ることができます。
1
2
3
4
5
6
7
8
9
|
import datetime
d = datetime.date(2020, 1, 1)
td = datetime.timedelta(weeks=1)
fm = '%Y年%m月%d日'
lst = []
for i in range(4):
lst.append((d + i * td).strftime(fm))
print('\n'.join(lst))
|
timedeltaのサンプルの解説
上のサンプルの実行結果は以下のようになります。
2020年01月01日
2020年01月08日
2020年01月15日
2020年01月22日
timedelta(weeks=1)で一週間間隔を指定し、forループで4回、一週間毎の日付を配列に格納します。最後にその内容を表示します。なおjoin()の使い方は以下の通りです。
‘要素の間に挟む文字列’.join(中身を1つにつなげたい配列)
Rubyのstrftime
最後はRubyのstrftimeを解説します。以下のように使用します。
1
2
3
4
|
nowtime = Time.now
p nowtime
p nowtime.strftime(“%Y年%m月%d日 %H時%M分%S秒”)
|
実行結果は以下になります。
2021-02-17 12:02:46.379696936 +0000
“2021年02月17日 12時02分46秒”
Time.nowで取得したTimeオブジェクトをpで表示しても日時の文字列が出てきますが、strftameでそれを自由にフォーマットできるということです。
曜日を表示する
なお曜日を表示する場合は以下のようにします。
1
2
3
|
nowtime = Time.now
p nowtime.strftime(“%Y/%m/%d %A”)
|
結果は以下の通りです。
“2021/02/17 Wednesday”
もし英語ではなく日本語で曜日を表示したい場合はどうしたらよいのでしょうか。Rubyは日本発のプログラミング言語ですが、strftimeだけで日本語の曜日を表示することはできません。
日本語で曜日を表示する方法
Rubyにおいて、日本語で曜日を表示するには、以下のようなやり方があります。
1
2
3
4
5
|
nowtime = Time.now
youbi = [“月”,”火”,”水”,”木”,”金”,”土”,”日”]
idx = nowtime.strftime(“%u”).to_i
p nowtime.strftime(“%Y年%m月%d日 #{youbi[idx - 1]}曜日”)
|
日本語曜日表示の解説
上のサンプルを実行すると以下のように表示されます。
“2021年02月17日 水曜日”
サンプルのstrftime(“%u”)の%uは曜日を数値で取得します。月曜日が1、火曜日が2といったように置き換えられます。ただし取得できる値は文字列なので、.to_iで数値に変換します。そしてyoubi[idx – 1]で配列の曜日の漢字を取得して表示するのです。idxから1を引くのは配列のインデックスは1からではなく0から始まるためです。
- システム
エンジニア - 曜日を日本語で表示することも可能なんですね。
- プロジェクト
マネージャー - はい。ここでは3つのプログラム言語でのstrftimeの使い方を見ていきました。
strftimeで日時のフォーマットは簡単にできる
strftimeの使い方を、PHP・Python・Rubyのそれぞれについて解説しました。どの言語でも基本的な機能は同じです。元々strftimeはC言語のライブラリにあった関数で、古い歴史があります。そのため、その後に登場した言語でも同じ名前で採用されているのです。
この記事を機会にPHP、Python、Rubyの中でまだ知らない言語について勉強してみましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Array新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)