量化交易入门笔记-Datetime和Time模块

Python 中,通常有三种方式用来表示时间,分别是时间戳、格式化的字符串、元组(struct_time)方式

  1. 时间戳

    一般来讲,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。可以运用"type(time.time())",返回的是 float 。返回时间戳方式的函数主要有 time()clock()

  2. 格式化的时间字符串

    格式化的时间字符串表示时间,如"%Y-%m-%d %H:%M:%S"表示 年-月-日 时:分:秒

  3. 元组(struct_time)方式

    struct_time元组共有9个元素,返回struct_time的函数主要有gmtime()/localtime()/strptime()

    示例:

    struct_time(tm_year=2016, tm_mon=2, tm_mday=2, tm_hour=11, tm_min=16, tm_sec=43, tm_wday=1, tm_yday=33, tm_isdst=0)
    # 参数分别表示 年,月,日,时,分,秒,星期几(0-6),年的第几天,是否为夏令时(默认为-1)
    

利用 Datetime 模块获得当前的日期和时间

# 导入datetime模块
import datetime

dt_time = datetime.datetime.now()

print("当前日期和时间是 %s" % dt_time)
print("ISO格式的日期和时间是 %s" % dt_time.isoformat())
print("当前的年份是 %s" % dt_time.year)
print("当前的月份是 %s" % dt_time.month)
print("当前的日期是 %s" % dt_time.day)
print("dd/mm/yyyy格式是 %s/%s/%s" % (dt_time.day, dt_time.month, dt_time.year))
print("当前小时是 %s" % dt_time.hour)
print("当前的分钟是 %s" % dt_time.minute)
print("当前的秒是 %s" % dt_time.second)

当前日期和时间是 2018-10-08 13:04:52.728721
ISO格式的日期和时间是 2018-10-08T13:04:52.728721
当前的年份是 2018
当前的月份是 10
当前的日期是 8
dd/mm/yyyy格式是 8/10/2018
当前小时是 13
当前的分钟是 4
当前的秒是 52

利用 Time 模块获得当前的日期和时间

# 导入time模块
import time

# 调用strftime()输出时间
print('24小时计时法,当前时间是:', time.strftime('%H:%M:%S'))
print('12小时计时法,当前时间是:', time.strftime('%I:%M:%S'))
print('dd/mm/yyyy 格式是:', time.strftime('%d/%m/%Y'))

print(time.localtime())

24小时计时法,当前时间是: 13:09:22
12小时计时法,当前时间是: 01:09:22
dd/mm/yyyy 格式是: 08/10/2018
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=13, tm_min=9, tm_sec=22, tm_wday=0, tm_yday=281, tm_isdst=0)

time.strftime(format[,t]):把一个代表时间的元组或者 struct_time(如由 time.localtime() 和 time.gmtime() 返回)转化为格式你给的时间字符串。如果 t 未指定,将传入 time.localtime()。如果元组中任何一个元素越界,ValueError 的错误将会被抛出

获得当前时间并转换为指定日期格式

# 导入datetime模块
import datetime

# 获得当前时间
now = datetime.datetime.now()
# 这是时间组格式 
print(now)
# 转换为指定格式 
otherStyleTime = now.strftime('%Y-%m-%d %H:%M:%S')
print(otherStyleTime)
print(now.strftime('%Y-%m-%d'))

2018-10-08 13:16:58.715215
2018-10-08 13:16:58
2018-10-08

获得三前的时间的方法

# 导入time模块
import time
# 导入datetime模块
import datetime

# 先获得时间元组格式的日期
threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3))
# 转换为时间戳
timeStamp = int(time.mktime(threeDayAgo.timetuple()))
# 转换为其他字符串格式 
otherStyleTime = threeDayAgo.strftime('%Y-%m-%d %H:%M:%S')

print(threeDayAgo)
print(timeStamp)
print(otherStyleTime)

2018-10-05 13:24:14.055158
1538717054
2018-10-05 13:24:14

获得三天前的日期的方法

# 导入datetime模块
import datetime

today = datetime.date.today()
print('今天日期是:', today)
# 用今天日期减掉时间差,参数为1,获得昨天的日期
yesterday = today - datetime.timedelta(days=1)
print('昨天的日期是:', yesterday)
# 用今天的日期加上时间差,参数为1天,获得明天的日期
tomorrow = today + datetime.timedelta(days=1)
print('明天的日期是:', tomorrow)

今天日期是: 2018-10-08
昨天的日期是: 2018-10-07
明天的日期是: 2018-10-09

获得历史交易日期

历史交易日往往因为法定节假日的不固定而导致交易日不固定,给我们的回测带来了很大的不便。下面讲解一个简单方法,可以轻松获得某只股票历史交易日

# 导入time模块
import time

initial = '2018-01-15'
tradingdays = get_price(
    '000001.XSHE', 
    fields='open', 
    start_date=initial, 
    end_date=time.strftime('%Y-%m-%d', time.localtime()))
tradingdays.index

DatetimeIndex(['2018-01-15', '2018-01-16', '2018-01-17', '2018-01-18',
               '2018-01-19', '2018-01-22', '2018-01-23', '2018-01-24',
               '2018-01-25', '2018-01-26', 
               ...
               '2018-09-17', '2018-09-18', '2018-09-19', '2018-09-20',
               '2018-09-21', '2018-09-25', '2018-09-26', '2018-09-27',
               '2018-09-28', '2018-10-08'],
              dtype='datetime64[ns]', length=175, freq=None, tz=None)

也可以这么写:

# 导入time模块
import time

initial = '2018-01-15'
datetime_now = datetime.datetime.now()

tradingdays = get_price(
    '000001.XSHE', 
    fields='open', 
    start_date=initial, 
    end_date=datetime_now.strftime('%Y-%m-%d'))
tradingdays.index

DatetimeIndex(['2018-01-15', '2018-01-16', '2018-01-17', '2018-01-18',
               '2018-01-19', '2018-01-22', '2018-01-23', '2018-01-24',
               '2018-01-25', '2018-01-26', 
               ...
               '2018-09-17', '2018-09-18', '2018-09-19', '2018-09-20',
               '2018-09-21', '2018-09-25', '2018-09-26', '2018-09-27',
               '2018-09-28', '2018-10-08'],
              dtype='datetime64[ns]', length=175, freq=None, tz=None)

注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!*

猜你喜欢

转载自blog.csdn.net/weixin_38486884/article/details/82966991