☆☆ 新着記事 ☆☆

2019年5月21日火曜日

PythonのDateTime.Object(UTC) のタイムゾーン変更 - 実践編

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 件のコメント:

コメントを投稿