fix: 简道云日期字段转为ISO 8601格式上传
This commit is contained in:
@@ -22,6 +22,9 @@ class JiandaoyunUploader:
|
|||||||
# 需要转换为数字的字段
|
# 需要转换为数字的字段
|
||||||
NUMERIC_FIELDS = {"最高限价", "最高投标限价", "预估金额", "招标估算金额"}
|
NUMERIC_FIELDS = {"最高限价", "最高投标限价", "预估金额", "招标估算金额"}
|
||||||
|
|
||||||
|
# 需要转换为日期的字段
|
||||||
|
DATE_FIELDS = {"发布时间", "项目发布时间", "投标截止日", "招标时间"}
|
||||||
|
|
||||||
def __init__(self, api_key: str = None):
|
def __init__(self, api_key: str = None):
|
||||||
self.api_key = api_key or JDY_CONFIG["api_key"]
|
self.api_key = api_key or JDY_CONFIG["api_key"]
|
||||||
self.headers = {
|
self.headers = {
|
||||||
@@ -116,10 +119,30 @@ class JiandaoyunUploader:
|
|||||||
num = self._parse_price(value)
|
num = self._parse_price(value)
|
||||||
if num is not None:
|
if num is not None:
|
||||||
jdy_data[jdy_field] = {"value": num}
|
jdy_data[jdy_field] = {"value": num}
|
||||||
|
elif local_field in self.DATE_FIELDS:
|
||||||
|
iso_date = self._to_iso8601(value)
|
||||||
|
if iso_date:
|
||||||
|
jdy_data[jdy_field] = {"value": iso_date}
|
||||||
else:
|
else:
|
||||||
jdy_data[jdy_field] = {"value": value}
|
jdy_data[jdy_field] = {"value": value}
|
||||||
return jdy_data
|
return jdy_data
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _to_iso8601(date_str: str) -> str:
|
||||||
|
"""将日期字符串转为 ISO 8601 格式(北京时间 UTC+8)"""
|
||||||
|
if not date_str or date_str in ("文档未提及", "详见公告"):
|
||||||
|
return ""
|
||||||
|
s = str(date_str).strip()
|
||||||
|
from datetime import datetime as _dt
|
||||||
|
for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d"):
|
||||||
|
try:
|
||||||
|
dt = _dt.strptime(s, fmt)
|
||||||
|
return dt.strftime("%Y-%m-%dT%H:%M:%S") + "+08:00"
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
# 无法解析,原样返回
|
||||||
|
return s
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse_price(price_str) -> int | None:
|
def _parse_price(price_str) -> int | None:
|
||||||
"""将价格字符串转为纯数字(元)"""
|
"""将价格字符串转为纯数字(元)"""
|
||||||
|
|||||||
Reference in New Issue
Block a user