Skip to content

Commit b5b293e

Browse files
committed
增加时间类型转换的功能函数
1 parent 191da76 commit b5b293e

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed

tqsdk/tafunc.py

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
tqsdk.tafunc 模块包含了一批用于技术指标计算的函数
77
"""
88

9+
import datetime
910
import pandas as pd
1011
import numpy as np
1112

@@ -624,3 +625,149 @@ def mad(x):
624625

625626
avedev_data = series.rolling(window=n).apply(mad, raw=True)
626627
return avedev_data
628+
629+
630+
def _to_ns_timestamp(input_time):
631+
"""
632+
辅助函数: 将传入的时间转换为int类型的纳秒级时间戳
633+
634+
Args:
635+
input_time (str/ int/ float/ datetime.datetime): 需要转换的时间:
636+
* str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000)
637+
638+
* int: int 类型纳秒级或秒级时间戳
639+
640+
* float: float 类型纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
641+
642+
* datetime.datetime: datetime 模块中 datetime 类型
643+
644+
Returns:
645+
int : int 类型纳秒级时间戳
646+
"""
647+
648+
if type(input_time) in {int, float}: # 时间戳
649+
if input_time > 2 ** 32: # 纳秒( 将 > 2*32数值归为纳秒级)
650+
return int(input_time)
651+
else: # 秒
652+
return int(input_time * 1e9)
653+
654+
elif isinstance(input_time, str): # str 类型时间
655+
d = datetime.datetime.strptime(input_time, "%Y-%m-%d %H:%M:%S.%f")
656+
d = int(d.timestamp() * 1e9)
657+
return d
658+
elif isinstance(input_time, datetime.datetime): # datetime 类型时间
659+
d = int(input_time.timestamp() * 1e9)
660+
return d
661+
else:
662+
raise TypeError("暂不支持此值的转换,返回原时间数据")
663+
664+
665+
def time_to_ns_timestamp(input_time):
666+
"""
667+
将传入的时间转换为int类型的纳秒级时间戳
668+
669+
Args:
670+
input_time (str/ int/float/ datetime.datetime): 需要转换的时间:
671+
* str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000)
672+
673+
* int: int 类型的纳秒级或秒级时间戳
674+
675+
* float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
676+
677+
* datetime.datetime: datetime 模块中的 datetime 类型时间
678+
679+
Returns:
680+
int : int 类型的纳秒级时间戳
681+
682+
Example::
683+
684+
print(time_to_ns_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型转为纳秒时间戳
685+
print(time_to_ns_timestamp(1571103122)) # 将秒级转为纳秒时间戳
686+
print(time_to_ns_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为纳秒时间戳
687+
"""
688+
return _to_ns_timestamp(input_time)
689+
690+
691+
def time_to_s_timestamp(input_time):
692+
"""
693+
将传入的时间转换为int类型的秒级时间戳
694+
695+
Args:
696+
input_time (str/ int/float/ datetime.datetime): 需要转换的时间:
697+
* str: str 类型的时间,如Quote行情时间的datetime字段 (eg. 2019-10-14 14:26:01.000000)
698+
699+
* int: int 类型的纳秒级或秒级时间戳
700+
701+
* float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
702+
703+
* datetime.datetime: datetime 模块中的 datetime 类型时间
704+
705+
Returns:
706+
int : int类型的秒级时间戳
707+
708+
Example::
709+
710+
print(time_to_s_timestamp(1.57103449e+18)) # 将纳秒级时间戳转为秒级时间戳
711+
print(time_to_s_timestamp("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为秒级时间戳
712+
print(time_to_s_timestamp(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为秒时间戳
713+
"""
714+
return int(_to_ns_timestamp(input_time) / 1e9)
715+
716+
717+
def time_to_str(input_time):
718+
"""
719+
将传入的时间转换为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型
720+
721+
Args:
722+
input_time (int/ float/ datetime.datetime): 需要转换的时间:
723+
724+
* int: int 类型的纳秒级或秒级时间戳
725+
726+
* float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
727+
728+
* datetime.datetime: datetime 模块中的 datetime 类型时间
729+
730+
Returns:
731+
str : %Y-%m-%d %H:%M:%S.%f 格式的 str 类型时间
732+
733+
Example::
734+
735+
print(time_to_str(1.57103449e+18)) # 将纳秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间
736+
print(time_to_str(1571103122)) # 将秒级时间戳转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间
737+
print(time_to_str(datetime.datetime(2019, 10, 14, 14, 26, 1))) # 将datetime.datetime时间转为%Y-%m-%d %H:%M:%S.%f 格式的str类型时间
738+
"""
739+
# 转为秒级时间戳
740+
ts = _to_ns_timestamp(input_time) / 1e9
741+
# 转为 %Y-%m-%d %H:%M:%S.%f 格式的 str 类型时间
742+
dt = datetime.datetime.fromtimestamp(ts)
743+
dt = dt.strftime('%Y-%m-%d %H:%M:%S.%f')
744+
return dt
745+
746+
747+
def time_to_datetime(input_time):
748+
"""
749+
将传入的时间转换为 datetime.datetime 类型
750+
751+
Args:
752+
input_time (int/ float/ str): 需要转换的时间:
753+
754+
* int: int 类型的纳秒级或秒级时间戳
755+
756+
* float: float 类型的纳秒级或秒级时间戳,如K线或tick的datetime字段 (eg. 1.57103449e+18)
757+
758+
* str: str 类型的时间,如Quote行情时间的 datetime 字段 (eg. 2019-10-14 14:26:01.000000)
759+
760+
Returns:
761+
datetime.datetime : datetime 模块中的 datetime 类型时间
762+
763+
Example::
764+
765+
print(time_to_datetime(1.57103449e+18)) # 将纳秒级时间戳转为datetime.datetime时间
766+
print(time_to_datetime(1571103122)) # 将秒级时间戳转为datetime.datetime时间
767+
print(time_to_datetime("2019-10-14 14:26:01.000000")) # 将%Y-%m-%d %H:%M:%S.%f 格式的str类型时间转为datetime.datetime时间
768+
"""
769+
# 转为秒级时间戳
770+
ts = _to_ns_timestamp(input_time) / 1e9
771+
# 转为datetime.datetime类型
772+
dt = datetime.datetime.fromtimestamp(ts)
773+
return dt

0 commit comments

Comments
 (0)