Python_datetime


Python_datetime

  • date(日期)、time(時間)、datetime(date+time)
  • timedelta(計算立時期間的型態)、timezone(處理時區資訊的型態)
1
import datetime

現在時間

  • datetime.now(datetime.today)
  • date.today()
  • time.localtime()
1
2
3
4
5
import datetime
now = datetime.datetime.now()
print(now)
today = datetime.datetime.today()
print(today)
2021-11-01 12:27:19.926574
2021-11-01 12:27:19.926574
1
2
3
import datetime
only_date = datetime.date.today()
print(only_date)
2021-11-01
1
2
import time
print(time.localtime())
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=1, tm_hour=12, tm_min=30, tm_sec=11, tm_wday=0, tm_yday=305, tm_isdst=0)

取得時間參數

1
2
3
4
5
import datetime
today = datetime.datetime.now()
print('year:', today.year)
print('month:', today.month)
print('day:', today.day)
year: 2021
month: 11
day: 1

處理日期格式

  • datetime.datetime.strptime()
  • datetime.datetime.strftime(“%Y/%m/%d %H:%M:%S”):設定輸出格式~
  • pd.to_datetime():pandas
1
2
3
4
5
import datetime
date = '2021/06/28'
dt = datetime.datetime.strptime(date, "%Y/%m/%d")
print("original:", date)
print("new:", dt)
original: 2021/06/28
new: 2021-06-28 00:00:00

應用

1
2
3
4
5
6
#計算今天是今年的第幾天
import datetime
date = input("今天日期<2021/11/01>:")
dt = datetime.datetime.strptime(date, "%Y/%m/%d")
this_year = datetime.datetime.strptime(date[:4]+"/01/01", "%Y/%m/%d")
print("今年已經過了",int((dt-this_year).days)+1, "天惹!!")
今天日期<2021/11/01>:2021/11/01
今年已經過了 305 天惹!!
1
2
3
4
5
6
7
#調整時差_datetime.timedelta()
import datetime
now = datetime.datetime.now()
time_del = datetime.timedelta(hours=3)
new_dt = now - time_del
print("原始時間:", now.strftime("%Y/%m/%d %H:%M:%S"))
print("時差時間:", new_dt.strftime("%Y/%m/%d %H:%M:%S"))
原始時間: 2021/11/01 12:58:30
時差時間: 2021/11/01 09:58:30

股票應用_交割日期計算

交割日期:

假設投資人在 T日 購買一張股票, T日稱為成交日期。
不過投資人必須要等到 T+1(隔日) 才會收到這張股票。
若是要賣這張股票,也是T+1(隔日)才能賣出。
而這張股票必須支付的股款,必須在T+2早上10點前存入證券交割帳戶,
T+2 也就是所謂的交割日期。
若是T+2早上10點後,戶頭裡面的餘額不夠支付,就會發生違約交割的情形。

股票買賣交易流程:

T日(今天) T+1日(明天) T+2日(後天10:00)
購買(賣出)股票 取得(失去)股票 支出(收入)股款

作業一:

每當我們成功買進股票時,券商發送訊息會告知成交的相關訊息,
請設計一程式,將成交回報的字串處理過後,輸出相關的交割資訊來提醒投資人。

input:  
"於 7/15 2330 限價 581元  盤中零股現買 20股 已成交"   
output: 
"您於 7/15 購買 2330,每股 581元 20股"  
"提醒您交割日期為 7月17日 10:00,交割款項為 11637元!"

備註:
輸入輸出的各項資訊都是以空格分開
交割款項 = 成交價格 + 券商手續費
成交價格 = 581(成交價) * 20(股數)
券商手續費 = 成交價格 * 0.1425%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#於 7/30 2330 限價 581元  盤中零股現買 20股 已成交
import datetime
step = datetime.timedelta(2)
data = input("於 7/30 2330 限價 581元 盤中零股現買 20股 已成交\n")
s = data.split(' ')
#print(s)
print("\n您於", s[1], "購買", s[2], ",每股", s[4], '共', s[6])

dt = datetime.datetime.strptime(s[1],"%m/%d")
day = dt + step
day = day.strftime("%m/%d")

price = float(s[4].replace('元',''))
#print(price)
num = int(s[6].replace('股',''))
s_price = round(price * num * 0.001425)
print("提醒您交割日期為", day, ",交割款項為", price*num+s_price, "元!" )
於 7/30 2330 限價 581元 盤中零股現買 20股 已成交
於 7/30 2330 限價 581元 盤中零股現買 20股 已成交

您於 7/30 購買 2330 ,每股 581元 共 20股
提醒您交割日期為 08/01 ,交割款項為 11637.0 元!