LoginSignup
1

More than 5 years have passed since last update.

Windows 10 Pro + Python3 で datetime を色々試してみる

Last updated at Posted at 2019-02-16

目的

確認しないといけない日が来るかも?と思いながら、参考サイトを見ながら
色々試してみる
※自分用の確認メモ。

サンプルコード

PS > python -V
Python 3.7.2

# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode

from datetime import datetime, date, time, timedelta
from dateutil.relativedelta import relativedelta
# pip3 install python-dateutil

# 
#   3.xで系でサポートされているバージョンにばらつきがあるので
#   使用前にはDocを確認する
#

現在のローカルな datetime

print(type(datetime.now()))
# <class 'datetime.datetime'>
print(datetime.now())
# 2019-02-09 21:43:18.936348

現在のローカルな日付および時刻を返す

print(type(datetime.today()))
# <class 'datetime.datetime'>
# 書式無しでは print 不可

書式文字列に従った文字列を返す

# date.strftime
# 明示的な書式文字列で制御された、日付を表現する文字列を返す
print(type(datetime.today().strftime('%Y/%m/%d')))
# <class 'str'>
print(datetime.today().strftime('%Y/%m/%d'))
# 2019/02/09
print(datetime.today().strftime('%Y/%m/%d %H:%M:%S'))
# 2019/02/09 21:43:18
# print(datetime.today().strftime('%Z'))
# TODO time-zone

日付の一部を変更する

# date.replace(year=self.year, month=self.month, day=self.day)
# キーワード引数で指定されたパラメータで置き換えられた 
# date オブジェクトを返す
print(type(datetime.today().replace(month=3)))
# <class 'datetime.datetime'>
print(datetime.today().replace(month=3).strftime('%Y/%m/%d'))
# 2019/03/10 : 2月 -> 3月に変更
print(datetime.today().replace(day=1).strftime('%Y/%m/%d'))
# 2019/02/01 : 当月1日に変更

日付を表す文字列 -> datetime に変換する

# datetime.strptime(date_string, format) 
# date_string に対応した datetime を返す
print(type(datetime.strptime('2019/02/09', '%Y/%m/%d')))
# <class 'datetime.datetime'>
print(datetime.strptime('2019/02/09', '%Y/%m/%d'))
# 2019-02-09 00:00:00
print(datetime.strptime('2019/02/09 21:41:28', '%Y/%m/%d %H:%M:%S'))
# 2019-02-09 21:41:28

年月日を数字で取得する

print(type(datetime.today().year))
# <class 'int'>
print(datetime.today().year)    # 2019
print(datetime.today().month)   # 2
print(datetime.today().day)     # 9

曜日を整数で返す


print(datetime.weekday(datetime.today()))
# 5 : 月曜日を 0、日曜日を 6
print(datetime.isoweekday(datetime.today()))
# 6 : 月曜日を 1、日曜日を 7

キーワード引数で指定された項目に加減算を行う

# datetime.timedelta(days=0, seconds=0, microseconds=0,
# milliseconds=0, minutes=0, hours=0, weeks=0)
# 二つの日付や時刻間の差を表す(分かりづらい・・・)
# 前日
print((datetime.today() - timedelta(days=1)).strftime('%Y/%m/%d'))
# 翌日
print((datetime.today() + timedelta(days=1)).strftime('%Y/%m/%d'))

キーワード引数で指定された項目に加減算を行う

# from dateutil.relativedelta import *
# pip3 install python-dateutil
# The order of attributes considered when this 
# relativedelta is added to a datetime is:
# Year Month Day Hours Minutes Seconds Microseconds

print(type(relativedelta(months=1)))
# <class 'dateutil.relativedelta.relativedelta'>
# 翌日
dt = datetime.today() + relativedelta(days=1)
print(dt.strftime('%Y/%m/%d'))
# 前日
dt = datetime.today() - relativedelta(days=1)
print(dt.strftime('%Y/%m/%d'))

# 当月1日
dt = datetime.today().replace(day=1)
print(dt.strftime('%Y/%m/%d'))      # 2019/02/01
# 次月1日
dt = datetime.today().replace(day=1) + relativedelta(months=1) 
print(dt.strftime('%Y/%m/%d'))      # 2019/03/01
# 当月末日
dt = datetime.today().replace(day=1) + relativedelta(months=1) \
                                     - relativedelta(days=1) 
print(dt.strftime('%Y/%m/%d'))      # 2019/02/28

参考にしたのは以下のサイト

Pythonで翌日や翌月みたいな日付の計算をする
datetime --- 基本的な日付型および時間型
strftime() と strptime() の振る舞い
dateutil - powerful extensions to datetime
relativedelta - Examples

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1