美文网首页简书面面观
量化交易入门笔记-Datetime和Time模块

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

作者: 东南有大树 | 来源:发表于2018-10-08 13:56 被阅读30次

    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)
    

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

    相关文章

      网友评论

        本文标题:量化交易入门笔记-Datetime和Time模块

        本文链接:https://www.haomeiwen.com/subject/nvzdaftx.html