Python 中,通常有三种方式用来表示时间,分别是时间戳、格式化的字符串、元组(struct_time)方式
-
时间戳
一般来讲,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。可以运用"type(time.time())",返回的是 float 。返回时间戳方式的函数主要有
time()
,clock()
等 -
格式化的时间字符串
格式化的时间字符串表示时间,如
"%Y-%m-%d %H:%M:%S"
表示 年-月-日 时:分:秒 -
元组(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)
注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!*
网友评论