PHPしか知らない僕がPythonを少し触ってみたよ 〜時を操る〜

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
あなたはだんだんpythonの知識が増えーる

この記事を三行にまとめると

何かとお世話になることが多い(と思われる)date系
日本とミラノの時間を同時に表示する時とかかな?
「date」「timedelta」「strftime」の三つくらいしか触れてない
PHPでも何かとお世話になることが多い(と思われる)date系ですが、Pythonだとどう書くのか。今日はその辺を見ていきたいと思います。

僕もまだあまり使いこなせてないので、そんな深いとこまでは突っ込めないです。なので何となくよく使いそうなものをいくつか見ていく感じになるかと。



今日の年月日を表示

まずは一番基本的なところで、今日の年月日を表示してみましょう。

//PHP
echo date('Y-m-d');

#Python
import datetime
print(datetime.date.today())

Pythonの場合はdatetimeというモジュールが必要になります。



任意の年月日を表示

例えば昨日の年月日や明日の年月日を表示したい場合。

//PHP
echo date('Y-m-d', strtotime('-1 days'));//昨日
echo date('Y-m-d', strtotime('+1 days'));//明日

#Python
import datetime
today = datetime.date.today()
print(today - datetime.timedelta(days = 1))#昨日
print(today + datetime.timedelta(days = 1))#明日

Pythonには「timdelta()」という、引数で指定した値の経過時間を取得できる関数があります。上記の場合「days = 1」と書いてるので一日分の時間をtodayから足したり引いたりすることで昨日や明日の日付が取得できるってすんぽーです。

マイナスの値も指定できます。

import datetime
today = datetime.date.today()
print(today + datetime.timedelta(days = -1))

これだと昨日の年月日になりますね。

days以外にも「seconds」「microseconds」「milliseconds」「minutes」 「hours」「weeks」などが指定できます。だから例えば一週間後の年月日を取得するならこうですね。

import datetime
today = datetime.date.today()
print(today + datetime.timedelta(weeks = 1))



年月日のフォーマットを変更

今日の年月日を「2018/02/07」や「2017年02月07日」の形式で出力してみます。

//PHP
echo date('Y/m/d');
echo date('Y年m月d日');

#Python
import datetime
today = datetime.date.today() 
print(today.strftime('%Y/%m/%d'))
print(today.strftime('%Y年%m月%d日'))

Pythonは「strftime()」という関数を使ってフォーマットを変更します。「%」をつけるってところ以外はPHPとだいたい同じですかね。例えば「%w」なら曜日の数字(日曜が0で土曜が6)になるし。

今はdate関数でフォーマットも変更しちゃいましたが、PHPにも「strftime()」というのがあり、そっちは%つきでフォーマットを指定します。比較するならこっちの方が良かったかしら。

echo strftime('%Y/%m/%d', time());
echo strftime('%Y年%m月%d日', time());



strftime()を使わずに年や月を取得

先ほどのstrftime()を使えば年だけとか月だけを表示することもできますが、Pythonのdatetimeオブジェクトには年や月だけを取る関数が用意されているので、それ使っても良いです。

#strftime()で年や月だけを表示
import datetime
today = datetime.date.today() 
print(today.strftime('%Y'))
print(today.strftime('%m'))

#strftime()を使わずに表示
import datetime
today = datetime.date.today() 
print(today.year)
print(today.month)

両者の違いは文字列型か数値型かってことですね。strftime()の場合は返り値が文字列型になりますが、下の方は数値型になります。四則演算などと絡める場合は注意が必要かもですね。

あと「%m」は月が一桁の場合は先頭に0がつきますが、下の「today.month」の方は0がつきません。



現在時刻を表示

今度は年月日じゃなくて時刻を表示してみましょう。

//PHP
echo date('H:i:s');//date()を使う場合
echo strftime('%H:%M:%S', time());//strftime()を使う場合

#Python
import datetime
print(datetime.datetime.now().strftime('%H:%M:%S'))

「now()」という関数を使うと現在時刻が取れるのですが、時刻だけじゃなくて年月日も一緒に取れるので、時刻だけ表示するにはフォーマットを変更する必要があります。

時間のオブジェクトにも時や分だけを取得する関数があります。

import datetime
now = datetime.datetime.now()
print(now.hour)#時
print(now.minute)#分



任意の時刻を表示

現在時刻の一時間前や一時間後を表示してみます。

//PHP
echo date('H:i:s', strtotime('-1 hours'));
echo date('H:i:s', strtotime('+1 hours'));

#Python
now = datetime.datetime.now()
before = now + datetime.timedelta(hours = 1)
after = now - datetime.timedelta(hours = 1)
print(before.strftime('%H:%M:%S'))
print(after.strftime('%H:%M:%S'))

年月日の時とやり方は一緒ですね。timedeltaを使って指定の時刻を取得しています。



mktime的なやつ

mktime的なやつって言い方で良いのかあれですが、あんな感じで年月日や時刻を取得する方法です。

例えば「2018年02月07日」と「11時30分」をそれぞれ取得するような場合。

//PHP
echo date('Y年m月d日', mktime(0, 0, 0, 2, 7, 2018));
echo date('H時i分', mktime(11, 30, 0, 2, 7, 2018));

#Python
import datetime
print(datetime.date(2018, 2, 7).strftime('%Y年%m月%d日'))
print(datetime.time(11, 30).strftime('%H時%M分'))

PHPのmktime()は時間だけを指定するわけにいかないので、時刻だけ指定したい場合も適当な年月日を入れておく必要がありますが、Pythonには月日に依存せず時間だけ取得できる関数があります。



年や月を置き換える これはPHPにはない機能のような気がしますが、時間や日付のオブジェクトの年や時だけを別の値に置換するような機能がPythonにはあるようです。

import datetime

#年を2020年に変える
today = datetime.date.today() 
print(today.replace(year = 2020))

#時を23時に変える
time = datetime.time(11, 30)
print(time.replace(23))

今のところどう使いこなせば良いかよく分かってないのですが……日本とミラノの時間を同時に表示する時とかかな?

でも特定のところだけ簡単に入れ替えられるのは便利かもしれないなーと思いました。






たくさん書いたわりには「date」「timedelta」「strftime」の三つくらいしか触れてない気がしますが、まあ、日付処理って頻度は高くてもだいたいやることは一緒だから、この辺を押さえとけばおおよそは大丈夫じゃないでしょうか。

それ以外にもいろいろあるようなのですが、全部は検証しきれないので、もっと知りたいって場合は、ここ(↓)とかを読んでくれぃ。
datetime



その他のPythonを少し触ってみたの記事はこちら
前書きと索引的な
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください