All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m42s
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import datetime
|
||
|
||
import akshare as ak
|
||
|
||
|
||
def is_trading_time_akshare(current_time=None):
|
||
"""
|
||
使用akshare判断当前是否为A股开市时间(包括交易日和交易时段)
|
||
|
||
参数:
|
||
current_time: 待判断的时间,默认为当前时间
|
||
返回:
|
||
bool: 是否为开市状态
|
||
"""
|
||
if current_time is None:
|
||
current_time = datetime.datetime.now()
|
||
|
||
# 获取当前日期字符串(YYYY-MM-DD)
|
||
current_date_str = current_time.strftime("%Y-%m-%d")
|
||
|
||
# 获取A股历史交易日数据(包含所有交易日)
|
||
trade_dates = ak.tool_trade_date_hist_sina()
|
||
|
||
# 1. 判断是否为交易日
|
||
is_trading_day = current_date_str in trade_dates["trade_date"].values
|
||
|
||
if not is_trading_day:
|
||
return False
|
||
|
||
# 2. 判断是否在交易时间段内
|
||
# 上午:9:30-11:30,下午:13:00-15:00
|
||
current_time_of_day = current_time.time()
|
||
morning_start = datetime.time(9, 30)
|
||
morning_end = datetime.time(11, 30)
|
||
afternoon_start = datetime.time(13, 0)
|
||
afternoon_end = datetime.time(15, 0)
|
||
|
||
in_morning = morning_start <= current_time_of_day <= morning_end
|
||
in_afternoon = afternoon_start <= current_time_of_day <= afternoon_end
|
||
|
||
return in_morning or in_afternoon
|
||
|
||
|
||
if __name__ == "__main__":
|
||
now = datetime.datetime.now()
|
||
print(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}")
|
||
print(f"是否为开市时间: {'是' if is_trading_time_akshare() else '否'}")
|
||
|
||
# 测试特定时间
|
||
test_times = [
|
||
datetime.datetime(2023, 10, 9, 10, 0), # 交易日上午
|
||
datetime.datetime(2023, 10, 9, 14, 0), # 交易日下午
|
||
datetime.datetime(2023, 10, 9, 8, 0), # 交易日前早
|
||
datetime.datetime(2023, 10, 7, 10, 0), # 周六
|
||
datetime.datetime(2023, 10, 1, 10, 0), # 国庆假期
|
||
]
|
||
|
||
print("\n测试特定时间:")
|
||
for test_time in test_times:
|
||
status = "是" if is_trading_time_akshare(test_time) else "否"
|
||
print(f"{test_time.strftime('%Y-%m-%d %H:%M')}: {status}") |