2 분 소요

Python datetime & timezone 뽀개기

설명

  • strftime : is used to convert a datetime object to a string (datetime -> string)
  • strptime : is used to convert a string to a datetime object (string -> datetime)
import datetime

dt = datetime.datetime(2022, 12, 12)
s = dt.strftime("%Y-%m-%d")
print(s)  # prints "2022-12-12"

import datetime

s = "2022-12-12"
dt = datetime.datetime.strptime(s, "%Y-%m-%d")
print(dt)  # prints "2022-12-12 00:00:00"

Examples

string -> date & date -> string

from datetime import datetime, timedelta, timezone

print( "#from string to date")
yyyymmdd_str = '20221212'
yyyymmdd_date = datetime.strptime(yyyymmdd_str, '%Y%m%d').date()

print(yyyymmdd_str, "type is", type(yyyymmdd_str))
print(yyyymmdd_date, "type is", type(yyyymmdd_date))

print("\n#from date to string")
yyyymmdd_date = datetime(2022, 12, 12)
yyyymmdd_str = yyyymmdd_date.strftime("%Y-%m-%d")

print(yyyymmdd_str, "type is", type(yyyymmdd_str))
print(yyyymmdd_date, "type is", type(yyyymmdd_date))

#from string to date
20221212 type is <class ‘str’>
2022-12-12 type is <class ‘datetime.date’>

#from date to string
2022-12-12 type is <class ‘str’>
2022-12-12 00:00:00 type is <class ‘datetime.datetime’>

timezone

from datetime import datetime, timedelta, timezone

timestamp_now_UTC = datetime.now()
timestamp_now_KST = datetime.now(timezone(timedelta(hours=9)))

print("timestamp_now_UTC : ", timestamp_now_UTC)
print("timestamp_now_KST : ", timestamp_now_KST)

timestamp_now_UTC : 2022-12-30 16:14:48.156993
timestamp_now_KST : 2022-12-30 16:14:48.157021+09:00

from datetime import datetime, timedelta, timezone

timezone_kst = timezone(timedelta(hours=9))

# UTC -> KST 
timestamp_UTC = datetime(2022, 12, 12,  1, 1, 1)
print("timestamp_UTC : ", timestamp_UTC, type(timestamp_UTC))
timestamp_KST = timestamp_UTC.astimezone(timezone_kst)
print("timestamp_KST : ", timestamp_KST, type(timestamp_KST))

timestamp_UTC : 2022-12-12 01:01:01 <class ‘datetime.datetime’>
timestamp_KST : 2022-12-12 01:01:01+09:00 <class ‘datetime.datetime’>

from datetime import datetime, timedelta, timezone

timezone_utc = timezone.utc 

# KST -> UTC
timestamp_KST = datetime(2022, 12, 12,  1, 1, 1)
print("timestamp_KST : ", timestamp_KST, type(timestamp_KST))
timestamp_UTC = timestamp_KST.astimezone(timezone_utc)
print("timestamp_UTC : ", timestamp_UTC, type(timestamp_UTC))

timestamp_KST : 2022-12-12 01:01:01 <class ‘datetime.datetime’>
timestamp_UTC : 2022-12-11 16:01:01+00:00 <class ‘datetime.datetime’>

from datetime import datetime, timedelta, timezone

timezone_utc = timezone.utc 

timestamp_KST = datetime(2022, 12, 12,  1, 1, 1)
timestamp_UTC = timestamp_KST.astimezone(timezone_utc)

delta = timedelta(days=1)

query_date_UTC = timestamp_UTC - delta
query_date_KST = timestamp_KST - delta

print("\nquery_date_UTC : from datetime -> string")
yyyy, mm, dd = (query_date_UTC.strftime('%Y'), query_date_UTC.strftime('%m'), query_date_UTC.strftime('%d'))
yyyymmdd, yyyy_mm_dd = (query_date_UTC.strftime('%Y%m%d'), query_date_UTC.strftime('%Y-%m-%d'))
hh = query_date_UTC.strftime('%H')  # 시
print(yyyymmdd, hh)

print("\nquery_date_KST : from datetime -> string")
yyyy, mm, dd = (query_date_KST.strftime('%Y'), query_date_KST.strftime('%m'), query_date_KST.strftime('%d'))
yyyymmdd, yyyy_mm_dd = (query_date_KST.strftime('%Y%m%d'), query_date_KST.strftime('%Y-%m-%d'))
hh = query_date_KST.strftime('%H')  # 시
print(yyyymmdd, hh)

query_date_UTC : from datetime -> string
20221210 16

query_date_KST : from datetime -> string
20221211 01

pandas

import pandas as pd 
import numpy as np 

#date range
datelist_periods= pd.date_range('20160701', periods = 6).tolist()
datelist_from_to = pd.date_range('20160701', '20160703').tolist()

print("printing datelist_periods")
print(*datelist_periods, sep = '\n')
print("\nprinting datelist_from_to")
print(*datelist_from_to, sep = '\n')
 

printing datelist_periods
2016-07-01 00:00:00
2016-07-02 00:00:00
2016-07-03 00:00:00
2016-07-04 00:00:00
2016-07-05 00:00:00
2016-07-06 00:00:00

printing datelist_from_to
2016-07-01 00:00:00
2016-07-02 00:00:00
2016-07-03 00:00:00

import pandas as pd 
import numpy as np 

#date range
df = pd.DataFrame(np.random.randn(6,4))
df.index = pd.date_range('20160701', periods = 6)
df['yyyy_mm_dd'] = pd.date_range('20160701', periods = 6) #datetime
df['yyyy'] = pd.to_datetime("2022", format='%Y')
df['mm'] = pd.to_datetime("02", format='%m')
df['Yr_Mo_dy'] = '2022-12-11'
df['Yr_Mo_dy_edit'] = df['Yr_Mo_dy'].apply(pd.to_datetime)
 
display(df)
df.info()

SQL datetime & timezone 뽀개기

설명

-- Sample data in my_table
WITH my_table AS (
  SELECT "2022-07-27 15:30:45" AS timestamp_str UNION ALL
  SELECT "2022-08-10 08:00:00" AS timestamp_str
)

-- Query using PARSE_DATETIME and FORMAT_DATETIME
SELECT 
  timestamp_str AS original_timestamp, -- Original timestamp string in string format
  -- input string : PARSE_DATE 
  -- input date/time : FORMAT_DATE


  -- str -> timestamp
  PARSE_DATETIME('%Y-%m-%d %H:%M:%S', timestamp_str) AS parsed_timestamp, 
  -- str -> datetime -> str
  FORMAT_DATETIME('%b %d, %Y - %I:%M %p', PARSE_DATETIME('%Y-%m-%d %H:%M:%S', timestamp_str)) AS formatted_timestamp 
FROM my_table;

댓글남기기