Python 3日付テキスト相互転送、タイムスタンプ、時間差、タイムゾーン変換
31798 ワード
2019-05-25整理して簡略化し、いくつかの常用日付時間処理方法をまとめた.2019-12-16いくつかの表現を最適化し、より理解しやすく、実際の過程で直接使用するのに便利である.
以下は基本的に私が日常的にコードを書く中で、最もよく使う日付関連部分です.
1.現在時刻のテキスト転送
%文字
意を表す
数値範囲
%y
年(2位)
00, 01, …, 99
%Y
年(4位)
0001, 0002, …, 2013, 2014, …, 9998, 9999
%m
月
01, 02, …, 12
%d
日
01, 02, …, 31
%H
時(24時間制)
00, 01, …, 23
%M
分
00, 01, …, 59
%S
秒
00, 01, …, 59
その他の記号の意味は、公式ドキュメントを参照してください.
strftime
url
datetime
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
time
https://docs.python.org/3/library/time.html#time.strftime
【注意】:time、datetimeの両方のタイムモジュールは
timeモジュール(フォーマットは前、時間は後)
datetimeモジュール(フォーマットは後、時間は前)
2、テキスト転送日
(1)従来の方法
(2)万能方法
この方法は多くのタイプの時間フォーマットに適用され、使用前に自分でテストすることをお勧めします.
ただし、海外の日時の常用フォーマットは国内とは異なることに注意してください.単写
3、タイムスタンプ関連
10ビットまたは13ビットのタイムスタンプを生成します(一部のWebページの爬虫類や構造のコミットに使用する場合があります).
タイムスタンプ転送日時(10ビットまたは13ビット共通)
タイムスタンプタイムテキスト(10ビットまたは13ビット共通)
4、時間差計算
2つの
2つのテキスト形式の日付であれば、
5、タイムゾーン変換
0タイムゾーンの
テキスト形式の
以下は基本的に私が日常的にコードを書く中で、最もよく使う日付関連部分です.
1.現在時刻のテキスト転送
strftime()
time
またはdatetime
にかかわらず、どのモジュールも可能であり、具体的にどのように出力するかは、フォーマットパラメータ'%Y-%m-%d %H:%M:%S'
を自分で調整する.%文字
意を表す
数値範囲
%y
年(2位)
00, 01, …, 99
%Y
年(4位)
0001, 0002, …, 2013, 2014, …, 9998, 9999
%m
月
01, 02, …, 12
%d
日
01, 02, …, 31
%H
時(24時間制)
00, 01, …, 23
%M
分
00, 01, …, 59
%S
秒
00, 01, …, 59
その他の記号の意味は、公式ドキュメントを参照してください.
strftime
url
datetime
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
time
https://docs.python.org/3/library/time.html#time.strftime
【注意】:time、datetimeの両方のタイムモジュールは
strftime
であるが、( , )
パラメータ位置は正反対である.またdatetimeのエスケープ記号はもっと全面的で、例えば%f
マイクロ秒で、datetimeだけがあって、timeはこの記号がありませんtimeモジュール(フォーマットは前、時間は後)
import time
t = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
print(type(t),t)
#
<class 'str'> 2019-05-25 08:56:45
datetimeモジュール(フォーマットは後、時間は前)
import datetime
dt = datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d %H:%M:%S.%f')
print(type(dt),dt)
#
<class 'str'> 2019-05-25 08:56:45.405471
2、テキスト転送日
(1)従来の方法
strptime(" "," ")
時間フォーマットを作成し、解析を行うimport datetime
dt = datetime.datetime.strptime('2019-05-25T07:46:45.743+0000','%Y-%m-%dT%H:%M:%S.%f%z')
print(type(dt),dt)
#
<class 'datetime.datetime'> 2019-05-25 07:46:45.743000+00:00
(2)万能方法
parse(" ")
自動解析from dateutil.parser import parse
dt = parse('2019-05-25 07:46:45')
print(type(dt),dt)
#
<class 'datetime.datetime'> 2019-05-25 07:46:45
この方法は多くのタイプの時間フォーマットに適用され、使用前に自分でテストすることをお勧めします.
dt = ["2001.07.04 AD at 12:08:56 PDT",
"Wed, 4 Jul 2001 12:08:56 -0700",
"190525",
"2018-08-06T10:00:00.000Z",
"Wed, Jul 4",
"12:08 PM",
"02001.July.04 AD 12:08 PM",
"20190525083855-0700",
"2001-07-04T12:08:56.235-0700",
"Thu Oct 16 07:13:48 GMT 2014"]
for i in dt:
print(parse(i))
#
2001-07-04 12:08:56
2001-07-04 12:08:56-07:00
2025-05-19 00:00:00
2018-08-06 10:00:00+00:00
2019-07-04 00:00:00
2019-05-25 12:08:00
2001-07-04 12:08:00
2019-05-25 08:38:55-07:00
2001-07-04 12:08:56.235000-07:00
2014-10-16 07:13:48+00:00
ただし、海外の日時の常用フォーマットは国内とは異なることに注意してください.単写
19-05-25
は2025 5 19
に解析されますprint(parse("19-05-25"))
#
2025-05-19 00:00:00
2019-05-25
なら間違いないprint(parse("2019-05-25"))
#
2019-05-25 00:00:00
3、タイムスタンプ関連
10ビットまたは13ビットのタイムスタンプを生成します(一部のWebページの爬虫類や構造のコミットに使用する場合があります).
import time
t = time.time()
print(type(t),t)
print('10 :',str(int(t)))
print('13 :',str(int(t*1000)))
#
<class 'float'> 1558750679.0872486
10 : 1558750679
13 : 1558750679087
タイムスタンプ転送日時(10ビットまたは13ビット共通)
import datetime
ts = '1517302458364' # int,float,string
dt1 = datetime.datetime.fromtimestamp(int((str(ts).strip().replace(".",""))[:10]))
print(type(dt1),dt1)
#
<class 'datetime.datetime'> 2018-01-30 16:54:18.364000
タイムスタンプタイムテキスト(10ビットまたは13ビット共通)
import time
ts = '1517302458364' # int,float,string
dt1 = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int((str(ts).strip().replace(".",""))[:10])))
print(type(dt1),dt1)
#
<class 'str'> 2018-01-30 16:54:18
4、時間差計算
2つの
datatime
形式の日付であれば、直接差を計算すればいいです.import datetime
dt1 = datetime.datetime.fromtimestamp(1517302458)
dt2 = datetime.datetime.now()
#print(type(dt1),dt1)
#print(type(dt2),dt2)
td = dt2-dt1
#print(type(td),td)
output = ' %d %.1f '%(td.days,td.seconds/60/60)
print(output)
#
<class 'datetime.datetime'> 2018-01-30 16:54:18
<class 'datetime.datetime'> 2019-12-16 16:18:37.443000
<class 'datetime.timedelta'> 684 days, 23:24:19.443000
684 23.4
2つのテキスト形式の日付であれば、
parse()
でdatetime
に変換し、同様に差を計算すればよいimport datetime
from dateutil.parser import parse
dt1 = '2018-01-30 16:54:18'
dt2 = '2019-12-16 16:18:37'
td = parse(dt2)-parse(dt1)
print(' %d %.1f '%(td.days,td.seconds/60/60))
#
684 23.4
5、タイムゾーン変換
0タイムゾーンの
datetime
を直接取得し、東8ゾーンのdatetime
に変換した.from datetime import datetime,timezone,timedelta
dt0 = datetime.utcnow().replace(tzinfo=timezone.utc)
dt8 = dt0.astimezone(timezone(timedelta(hours=8))) #
print('UTC \t%s
UTC+8 \t%s'%(dt0,dt8))
#
UTC 2019-05-25 02:48:54.281741+00:00
UTC+8 2019-05-25 10:48:54.281741+08:00
テキスト形式の
2019-05-25T02:48:54.281741+00:00
を東8区datetime
に変換したい場合from datetime import datetime,timezone,timedelta
from dateutil.parser import parse
dt0_str = '2019-05-25T02:48:54.281741+00:00'
dt0 = parse(dt0_str)
dt8 = dt0.astimezone(timezone(timedelta(hours=8)))
print(type(dt0),dt0)
print(type(dt8),dt8)
#
<class 'datetime.datetime'> 2019-05-25 02:48:54.281741+00:00
<class 'datetime.datetime'> 2019-05-25 10:48:54.281741+08:00