源平面文件日期格式求助:6/25/2022 12:57:37.733 PM格式致数据被拒
处理MM/DD/YYYY hh:mm:ss.fff PM格式日期的可行方案
方案1:ETL工具中配置日期解析规则
如果使用Informatica、Talend、DataStage这类ETL工具,直接在字段映射阶段指定对应日期格式字符串:
- Informatica:在字段高级属性里设置格式为
MM/dd/yyyy hh:mm:ss.fff a - Talend:使用
tConvertType组件,输入格式设为"MM/dd/yyyy hh:mm:ss.SSS a" - DataStage:转换阶段调用
StringToDate函数,参数填"%m/%d/%Y %I:%M:%S.%3N %p"
方案2:Python脚本预处理平面文件
用Python读取源文件并转换日期格式,示例代码:
import csv from datetime import datetime # 读取源文件并生成处理后的文件 with open('source_file.csv', 'r', encoding='utf-8') as infile, open('processed_file.csv', 'w', newline='', encoding='utf-8') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) # 写入表头 writer.writerow(next(reader)) # 逐行处理数据 for row in reader: # 假设日期在第2列(索引1),根据实际位置调整 raw_date = row[1] # 解析原日期格式 parsed_date = datetime.strptime(raw_date, '%m/%d/%Y %I:%M:%S.%f %p') # 转换为系统兼容的格式(示例为ISO标准格式,可按需调整) formatted_date = parsed_date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] row[1] = formatted_date writer.writerow(row)
方案3:数据库层面转换(导入临时表后处理)
如果先将文件导入临时表再处理,以常见数据库为例:
- MySQL:
-- tmp_table为临时表,date_str存储原日期字符串 SELECT STR_TO_DATE(date_str, '%m/%d/%Y %h:%i:%s.%f %p') AS standardized_date FROM tmp_table;
- SQL Server:
SELECT CAST(date_str AS DATETIME2) AS standardized_date FROM tmp_table;
方案4:Spark读取时指定格式
如果用Spark处理文件,直接在读取阶段配置日期解析规则:
from pyspark.sql import SparkSession from pyspark.sql.functions import to_timestamp spark = SparkSession.builder.appName("DateParse").getOrCreate() # 读取源文件 df = spark.read.csv("source_file.csv", header=True) # 转换日期字段 df = df.withColumn("standardized_date", to_timestamp("date_column", "MM/dd/yyyy hh:mm:ss.SSS a")) # 写出处理后的数据 df.write.csv("processed_file.csv", header=True)
注意:所有方案需根据你的数据处理系统支持的目标格式调整输出规则,核心是确保原格式MM/dd/yyyy hh:mm:ss.fff a能被正确解析(不同工具的格式符号可能略有差异,比如%f对应毫秒、%p对应AM/PM)。
内容的提问来源于stack exchange,提问作者kITTY
相关产品推荐
相关产品推荐

