.NET開発者のためのブログメディア
strftimeとは?strftimeの使い方をPHP・Python・Rubyの3つの言語で解説!
- SE
- strftimeを使うメリットとはなんでしょう?
- PM
- 時刻を指定のフォーマットに変換できることがメリットして挙げられます。
目次
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から始まるためです。
- SE
- 曜日を日本語で表示することも可能なんですね。
- PM
- はい。ここでは3つのプログラム言語でのstrftimeの使い方を見ていきました。
strftimeで日時のフォーマットは簡単にできる
strftimeの使い方を、PHP・Python・Rubyのそれぞれについて解説しました。どの言語でも基本的な機能は同じです。元々strftimeはC言語のライブラリにあった関数で、古い歴史があります。そのため、その後に登場した言語でも同じ名前で採用されているのです。
この記事を機会にPHP、Python、Rubyの中でまだ知らない言語について勉強してみましょう。
Search キーワード検索
Popular 人気の記事
-
.NET Framework 3.5をWindows10にインストールする方法
2019年10月24日 -
EdgeとChromeはどう違う?それぞれのスペック7つを比較解説!
2020年09月28日 -
【VB.NET入門】DataGridViewの使い方まとめ
2019年12月22日 -
VB.NETをおすすめする3つの理由とは?VBAとの違いや勉強方法を解説
2019年12月21日 -
Windows10のテキストエディタおすすめ20選!選ぶポイント3つ
2020年04月28日
reccomended おすすめ記事
-
C#のusingステートメントでリソースの解放【Disposeとの違いとは】
2020年03月17日 -
【SQL Serverログの操作】トランザクションログの使用量を確認する方法
2020年03月16日 -
【.NETが統合】.NET 5の概要と今後のリリース予定
2020年03月05日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
ソフトを用いた3DCGアート/東京都千代田区/【WEB面談可】/テレワーク
月給50万~50万円東京都千代田区(秋葉原駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)