Pythonはどうやって時間処理をしますか?
私たちはよく時間の処理に出会います。pythonで時間の処理をするのはあまり便利ではないです。今回はpythonの時間処理を紹介します。
pythonを使って時間処理をします。主にtime、careendar、datetime、pandsのいくつかの倉庫を使っています。その中で、これから2つが一番よく使われます。
今回は主にdatetimeライブラリで時間処理をするための常用操作を紹介します。
1.datetimeベース
1.1現在時間の取得
Unixタイムスタンプ: Unixではしばしば1つのデジタル記録時間を用いて、開始時間からの差の秒数を表している(システムの精度によっては、時間単位はミリ秒、時にはナノ秒)。0より大きいということは、開始時間の後、0より小さいと開始時間の前を表します。この数字は浮動小数点タイプ、整数タイプがありますが、この数字をUnixタイムスタンプ(Timestamp)と呼びます。 streftmeつまりstring format timeは、時間を文字列 にフォーマットするために使用されます。 straptimeつまりstring parse timeは、文字列を時間 に解析するために使用されます。
dateutil.parserは時々、'42'が2042年に今日の日付を加えると解析されます。datetime.datetime(2042,9,1,0,0)
timedeltaは2つの時間の間の時間差を表すことができる。
dtm.timedelta(days=0、seconds=0、microseconds=0、miliseconds=0、minutes=0、houss=0、weeks=0)
以上はPythonがどうやって時間処理をするかの詳細です。Pythonの時間処理に関する資料は他の関連記事に注目してください。
pythonを使って時間処理をします。主にtime、careendar、datetime、pandsのいくつかの倉庫を使っています。その中で、これから2つが一番よく使われます。
今回は主にdatetimeライブラリで時間処理をするための常用操作を紹介します。
1.datetimeベース
1.1現在時間の取得
import time
import datetime as dtm
## datetime
dtime = dtm.datetime.now() # dtm.datetime.utcnow()
dtime
# datetime.datetime(2018, 12, 15, 13, 1, 30, 200649) # 、 、 、 、 、 、
dtime.year, dtime.month, dtime.day
# (2018, 12, 15)
dtm.datetime.strftime(dtm.datetime.now(), '%Y-%m-%d %H:%M:%S')
# '2018-12-15 20:47:45'
# time :
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time( )))
# '2018-12-15 20:49:17'
time.strftime("%Y-%m-%d %H:%M:%S")
# '2018-12-15 20:50:11'
1.2 datetime基本操作
from datetime import datetime, date, time
# Using datetime.combine()
d = date(2005, 7, 14)
t = time(12, 30)
datetime.combine(d, t)
datetime(2005, 7, 14, 12, 30)
# datetime :
datetime.date()
datetime.time()
# str()
dt = datetime(2005, 7, 14, 12, 30)
# datetime(%Y,%m,%d,%H,%M,%S):
# datetime 6 , 。 , , 。
# >>> # Using datetime.timetuple() to get tuple of all attributes
tt = dt.timetuple()
for it in tt:
print(it)
# 2005 # year
# 7 # month
# 14 # day
# 12 # hour
# 30 # minute
# 0 # second
# 3 # weekday (0 = Monday, 6 = Sunday)
# 195 # number of days since 1st January
# -1 # dst - method tzinfo.dst() returned None
####################################################
#
x='2018-05-27'
int(dtm.datetime(int(x[ :4]),int(x[5:7]),int(x[8: ])).strftime('%w'))
# 0
dtm.datetime(2017, 1, 1).strftime("%w") # 0-6 SUN-SAT
2.タイムスタンプの切り替えUnixタイムスタンプ: Unixではしばしば1つのデジタル記録時間を用いて、開始時間からの差の秒数を表している(システムの精度によっては、時間単位はミリ秒、時にはナノ秒)。0より大きいということは、開始時間の後、0より小さいと開始時間の前を表します。この数字は浮動小数点タイプ、整数タイプがありますが、この数字をUnixタイムスタンプ(Timestamp)と呼びます。
import time
import datetime as dtm
##
dtime = dtm.datetime.now() # dtm.datetime.utcnow()
#
ans_time = int(time.mktime(dtime.timetuple()))
ans_time
# 1535860540
# -1
t1 = datetime.datetime.fromtimestamp(ans_time) # local time
t1
# datetime.datetime(2018, 9, 2, 11, 55, 40)
# time localtime() : time.localtime(ans_time)
# -2
t2 = datetime.datetime.utcfromtimestamp(ans_time) # utc time
t2
# datetime.datetime(2018, 9, 2, 3, 55, 40)
t2.strftime("%Y--%m--%d %H:%M:%S")
# 2018--09--02 03:55:40
# -3
pd.to_datetime(ans_time,unit='s') # utc time
# Timestamp('2018-09-02 03:55:40')
3.時間書式の変換
import datetime as dtm
start = dtm.datetime(2011,1,7,1,21,1)
# datetime.datetime(2011, 1, 7, 1, 21, 1)
start.strftime('%Y-%m-%d %H:%M:%S')
# '2011-01-07 01:21:01'
dtm.datetime.strptime('2011-01-07 01:21:01','%Y-%m-%d %H:%M:%S')
# datetime.datetime(2011, 1, 7, 1, 21, 1)
str(start)
# '2011-01-07 01:21:01'
start.strftime("%Y-%m-%d 00:00:00")
# '2011-01-07 00:00:00'
# The strftime method formats a datetime as a string:
In [1]: dt.strftime('%m/%d/%Y %H:%M')
Out[1]: '10/29/2011 20:30'
# Strings can be converted (parsed) into datetime objects using the strptime function:
In [2]: dtm.datetime.strptime('20091031', '%Y%m%d')
Out[2]: datetime.datetime(2009, 10, 31, 0, 0)
>>> z
dtm.datetime(2012, 9, 23, 21, 37, 4, 177393)
>>> nice_z = dtm.datetime.strftime(z, '%A %B %d, %Y')
>>> nice_z
'Sunday September 23, 2012'
#
dt = dtm.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
#
# time.strftime( '%Y-%m-%d' , time.localtime(time.time()))
# >>> # Formatting datetime
print(dt.strftime("%A, %d. %B %Y %I:%M%p"))
# 'Tuesday, 21. November 2006 04:30PM'
'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
# 'The day is 21, the month is November, the time is 04:30PM.'
'''
Datetime format specification:
%Y Four-digit year
%y Two-digit year
%m Two-digit month [01, 12]
%d Two-digit day [01, 31]
%H Hour (24-hour clock) [00, 23]
%I Hour (12-hour clock) [01, 12]
%M Two-digit minute [00, 59]
%S Second [00, 61] (seconds 60, 61 account for leap seconds)
%w Weekday as integer [0 (Sunday), 6]
datetime.straptime解析時間は時間の書式を入力する必要がありますが、dateutilのサードパーティライブラリのパーrser.parse方法はもっと柔軟です。dateutil.parserは時々、'42'が2042年に今日の日付を加えると解析されます。datetime.datetime(2042,9,1,0,0)
from dateutil.parser import parse
parse('2011-01-03') # datetime.datetime(2011, 1, 3, 0, 0)
parse('Jan 31, 1997 10:45 PM') # datetime.datetime(1997, 1, 31, 22, 45)
parse('6/12/2011', dayfirst=True) # datetime.datetime(2011, 12, 6, 0, 0)
# pandas:
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
# DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)
4.Timedeltatimedeltaは2つの時間の間の時間差を表すことができる。
dtm.timedelta(days=0、seconds=0、microseconds=0、miliseconds=0、minutes=0、houss=0、weeks=0)
t1 = dtm.datetime(2018,7,12,15,6,9)
t2 = dtm.datetime(2018,9,11,12,33,23)
td = t2-t1
td
# datetime.timedelta(60, 77234)
td.days,td.seconds
# (60, 77234)
# timedelta : day, hour, minute
def parse_timedelta(td):
"""
transform timedelta to day, hour, minute
"""
return td.days, td.seconds//3600, (td.seconds//60)%60
parse_timedelta(td)
# (60, 21, 27)
timedeltaを利用して時間外挿を行う:
import datetime as dtm
# 100
(dtm.datetime.now() - dtm.timedelta(days = 100)).strftime("%Y-%m-%d")
def TaftD(FORMAT_DATE,i):
"""
"""
return (dtm.datetime.strptime(FORMAT_DATE, '%Y-%m-%d') + dtm.timedelta(days = i)).strftime('%Y-%m-%d')
def TaftH(FORMAT_TIME,i):
"""
"""
return (dtm.datetime.strptime(FORMAT_TIME, '%Y-%m-%d %H:%M:%S') + dtm.timedelta(hours = i)).strftime('%Y-%m-%d %H:%M:%S')
TaftD("2018-05-17", -2)
# '2018-05-15'
TaftH("2018-05-17 10:40:00", 2)
# '2018-05-17 12:40:00'
今回は主にdatetimeが時間処理するためのいくつかの常用操作を紹介しています。その後、パンdasの中のいくつかの時間処理の操作を紹介します。いらっしゃいませ。転送を期待しています。以上はPythonがどうやって時間処理をするかの詳細です。Pythonの時間処理に関する資料は他の関連記事に注目してください。