날짜시간


In [2]:
time_str = '2015-07-08 11:39:28'
year = time_str[:4]
month = time_str[5:7]
day = time_str[8:10]

print('{}{}{}일'.format(year, month, day))


2015년 07월 08일

In [4]:
time_str = 'July 8 15'

year = time_str[:4]
month = time_str[5:7]
day = time_str[8:10]

print('{}{}{}일'.format(year, month, day))


July년 8 월 5일

In [3]:
start_day = '2014-06-28'
end_day = '2015-07-08'
how_many_days = end_day - start_day
print(how_many_days)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-22d996439ef9> in <module>()
      1 start_day = '2014-06-28'
      2 end_day = '2015-07-08'
----> 3 how_many_days = end_day - start_day
      4 print(how_many_days)

TypeError: unsupported operand type(s) for -: 'str' and 'str'

In [125]:
from datetime import datetime

In [12]:
now = datetime.now()
now


Out[12]:
datetime.datetime(2015, 7, 8, 14, 27, 0, 243933)

In [4]:
dt = datetime(2011,10,29,20,30,21)
print(dt.day)
print(dt.minute)


29
30

In [127]:
middle_age = datetime(1050, 1,1)
middle_age


Out[127]:
datetime.datetime(1050, 1, 1, 0, 0)

In [5]:
dt.date()


Out[5]:
datetime.date(2011, 10, 29)

In [6]:
dt.time()


Out[6]:
datetime.time(20, 30, 21)

datetime을 특정한 문자열 형식으로 출력


In [19]:
now = datetime.now()

print(now.strftime('%b/%d/%Y %H:%M %A'))
print(now.strftime('%Y-%m-%d %H:%M %a'))


Jul/08/2015 14:36 Wednesday
2015-07-08 14:36 Wed

문자열로부터 datetime 객체 생성


In [23]:
datetime.strptime('20091009', '%Y%d%m')


Out[23]:
datetime.datetime(2009, 9, 10, 0, 0)

In [25]:
# 2015-07-08 14:20 문자열을 datetime 객체로 변환
# 참조: https://docs.python.org/2/library/datetime.html
datetime.strptime('15-07-08 14:20', '%y-%m-%d %H:%M')


Out[25]:
datetime.datetime(2015, 7, 8, 14, 20)

시간 계산


In [32]:
now = datetime.now()
print(now+100) # 오류! 100초? 100일? 100년?


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-3c9bb2e99ec4> in <module>()
      1 now = datetime.now()
----> 2 print(now+100) # 오류! 100초? 100일? 100년?

TypeError: unsupported operand type(s) for +: 'datetime.datetime' and 'int'

In [35]:
now = datetime.now()
diff = now-datetime(1982,12,27)
print(diff)
print(type(diff))
print(now-diff)


11881 days, 15:03:52.835288
<type 'datetime.timedelta'>
1982-12-27 00:00:00

In [36]:
from datetime import timedelta
now-timedelta(days=30)


Out[36]:
datetime.datetime(2015, 6, 8, 15, 3, 52, 835288)

시간값 비교


In [39]:
now > datetime(1982, 12,27)


Out[39]:
True

In [40]:
now == datetime(1982, 12,27)


Out[40]:
False

In [42]:
datetime(2015,7,30) < now+timedelta(days=30)


Out[42]:
True

도전과제

이성주는 SJ전자의 주식을 보유하고 있다. 날마다 장 종료 시점의 가격을 기록하였다. 오늘로부터 7일 이전을 기준으로 90일간의 수익률을 계산해 출력하시오.


In [58]:
import random
from datetime import datetime, timedelta
# 주식 가격 시뮬레이션
def gen_stock_price(output_file, days=1000):
    # 주식의 최초 가격 설정
    price = 1000
    # 기록 시작일 설정
    day = datetime.now() - timedelta(days=days)
    # 지정된 일수만큼 모의 데이터 생성
    logs = []
    for i in range(days):
        # [-3, 3] 범위의 무작위 정수값을 생성
        random_diff = random.randint(-3,3)
        # 주식 가격의 등락을 시뮬레이션
        price += random_diff        
        # 파일로 출력할 문자열 설정
        price_log = '{}: {}\n'.format(day.strftime('%Y-%m-%d'), price)
        logs.append(price_log)
        # 다음날로 설정
        day += timedelta(days=1)

    # 파일 출력
    f = open(output_file, 'w')
    f.writelines(logs)
    f.close()

In [123]:
gen_stock_price('sim_stock.txt')

In [116]:
def calc_profit(filename):
    # 파일에서 데이터를 읽어오기
    f = open(filename)
    price_log = []
    for line in f.readlines():
        datetime_str, price = tuple(line[:-1].split(':'))
        day = datetime.strptime(datetime_str, '%Y-%m-%d')
        price_log.append((day, int(price)))
    f.close()
        
    # 수익률 계산 구간 날짜 지정
    end_day = datetime.now() - timedelta(days=7)
    start_day = end_day - timedelta(days=90)
    
    # 각 날짜의 가격 가져오기
    start_end_price = []
    for log in price_log:
        if start_day.date() == log[0].date() or end_day.date() == log[0].date():
            start_end_price.append(log)
    
    # 수익률 계산
    profit = (start_end_price[1][1] - start_end_price[0][1])/float(start_end_price[0][1])
    return profit

In [124]:
from __future__ import print_function
profit = calc_profit('sim_stock.txt')
print('{:.2%}'.format(profit))


0.38%

In [ ]: