import datetime
import pytz
import pandas as pd
import numpy as np
string_date='2019/05/19 04:00:00' #文字列
#文字列を日付情報に
dt_end = datetime.datetime.strptime(string_date,'%Y/%m/%d %H:%M:%S')
print(dt_end ) # output:2019-05-19 04:00:00
print(type(dt_end)) # output:<class 'datetime.datetime'>
#生成済みの日付オブジェクトに、タイムゾーン情報を付与
new_date=dt_end.replace(tzinfo=pytz.UTC)
print(new_date)# output:2019-05-19 04:00:00+00:00
#UTCタイムゾーンを、ETタイムゾーンに
et = pytz.timezone('US/Eastern')
dt_et = new_date.astimezone(et)
print(dt_et)# output:2019-05-19 00:00:00-04:00
#UTC時間のdt_endから24時間前の時間を取得しリスト化
dt_start = dt_end + datetime.timedelta(days=-1)
time_list=[]
for i in range(len(time_pd)):
time_list.append(dt_end + datetime.timedelta(hours=-i))
time_pd = pd.DataFrame(data = [[time_list[i]]for i in range(len(time_pd))], columns=['Date'])
print(time_pd)
print(time_pd.at[0,'Date'])#要素へのアクセス
for i in range(len(time_pd)):
if time_pd.at[i,"Date"] < dt_end and time_pd.at[i,"Date"]> dt_start:
time_pd.at[i,'Text']=np.array('Checked')
print(time_pd)
◇datetimeモジュールと利用可能なクラス
https://docs.python.org/3/library/datetime.html
datetimeモジュールには、3つのクラスが用意されている。
クラス 用途
date 主に日付を表現
time 時刻を表現
datetime 日付と時刻を合わせて表現
*datetime.date : 日付
today= datetime.date.today() #dateクラスにはtodayというattributeはない。
print(today) #2019-05-26
*注意)
date objectと datetime objectの比較はできない。
*datetime.time : 時刻
time_test = datetime.time(13, 32, 30, 1234)
print(time_test) #13:32:30.001234
のようにして使う。このクラスには、now()のようなモジュールがなく、現在時刻を取得するというような便利なことはできない。
*datetime.datetime : 日時(日付と時刻)
(import datetime の後、from datetime import datetimeまで記述しておけば、 datetime.datetimeと2度記述せずに、datetime.now()などと記述できる。)
now= datetime.datetime.now()
print(now) #2019-05-26 00:02:27.209096
print(now.tzinfo) # timezone情報の確認
>> None
#直接utcの時刻を取得
utc=pytz.timezone('UTC')
now_utc = datetime.datetime.now(utc)
print(now_utc) #2019-05-25 16:40:09.428642+00:00
hour_now = now_utc.hour ♯ Int型
print(hour_now) #16
minute_now = now_utc.minute ♯ Int型
print(minute_now) #40
time_now = hour_now + minute_now ♯これはやってはいけない例
print(time_now) #56
time_now2 = now_utc.time() ♯ 時刻だけ取得したい場合はこれ。(1)
print(time_now2) ♯17:24:49.205886
dt = datetime.datetime.now() ♯ 時刻だけ取得したい場合はこれ。(2)
d_truncated = datetime.date(dt.year, dt.month, dt.day)
print(d_truncated) #2019-05-26
*文字列の表示形式を変更
date = '2019-07-16 02:11:46'
#String to Date Object
dte = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
#Date Object to String with format change
dt_truncated = datetime.date(dte.year, dte.month, dte.day)
print(dt_truncated) #2019-07-16
◇timeモジュール
time()関数を使うと現在のUNIX時間(エポック秒)を浮動小数点数float型で取得できる。
import time
time = time.time()
print(time) #1558801964.0242553
*datetime.timedelta : 時間差・経過時間
(datetime.datetime.timedelta ではない。)
*strftime(): 日付、時間から文字列への変換
*strptime(): 文字列から日付、時間への変換
*日付フォーマットの変更
today1= datetime.date.today()
today2= "{0:%Y/%m/%d}".format(today1)
*日付自身の変更
new_date=dt_end.replace(hour=4, minute=0, second=0, microsecond=0)
使用できる書式化コード
*%d : 0埋めした10進数で表記した月中の日にち
*%m : 0埋めした10進数で表記した月
*%y : 0埋めした10進数で表記した西暦の下2桁
*%Y : 0埋めした10進数で表記した西暦4桁
*%H : 0埋めした10進数で表記した時 (24時間表記)
*%I : 0埋めした10進数で表記した時 (12時間表記)
*%M : 0埋めした10進数で表記した分
*%S : 0埋めした10進数で表記した秒
*%f : 0埋めした10進数で表記したマイクロ秒(6桁)
*%A : ロケールの曜日名
*%a : ロケールの曜日名(短縮形)
*%B : ロケールの月名
*%b : ロケールの月名(短縮形)
*%j : 0埋めした10進数で表記した年中の日にち(正月が'001')
*%U : 0埋めした10進数で表記した年中の週番号 (週の始まりは日曜日)
*%W : 0埋めした10進数で表記した年中の週番号 (週の始まりは月曜日)
jst=pytz.timezone('Asia/Tokyo')
utc=pytz.timezone('UTC')
et=pytz.timezone('US/Eastern')
#error: astimezone() cannot be applied to a naive datetime
0 件のコメント:
コメントを投稿