You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV第一列yyyy/mm/dd日期转为yyyymmdd适配MySQL Int类型

解决CSV第一列日期格式转换为MySQL整数日期的问题

我懂你要做的事:把CSV第一列2018/01/25这种带斜杠的日期,转成无斜杠的20180125整数格式存入MySQL的int类型字段,同时完全保留其他列的内容不动。先给你修正原代码里的小坑,再实现日期转换的逻辑。

首先注意你原代码里的一个问题:while(reader.readLine()!= null)里已经调用了一次readLine(),循环里又调用一次,会跳过一行数据,得先把读取的行存到变量里再判断循环条件。

基础实现方案(假设日期格式都是标准yyyy/MM/dd)

直接去掉斜杠再转成整数,代码修改如下:

String readLine;
// 修正读取逻辑,避免跳行
while ((readLine = reader.readLine()) != null) {
    String[] rawRow = readLine.split(",");
    
    // 只处理第一列,先确保数组存在第一列数据
    if (rawRow.length > 0) {
        // 去掉日期里的所有斜杠,先trim避免前后空格干扰
        String cleanDate = rawRow[0].trim().replaceAll("/", "");
        // 转成int(如果MySQL字段是bigint,建议用Long.parseLong避免溢出)
        int mysqlDate = Integer.parseInt(cleanDate);
        // 替换第一列的值
        rawRow[0] = String.valueOf(mysqlDate);
    }
    
    // 后续处理逻辑:比如把rawRow转成SQL插入语句,或者写入其他地方
    // 示例:打印处理后的行
    System.out.println(String.join(",", rawRow));
}

更严谨的实现(处理非标准日期格式)

如果CSV里的日期可能有单数字的月/日(比如2018/1/5),直接去掉斜杠会得到201815这种无效值,这时候用日期格式化工具解析再输出更稳妥:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

// ...

String readLine;
// 定义输入输出的日期格式
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd");

while ((readLine = reader.readLine()) != null) {
    String[] rawRow = readLine.split(",");
    
    if (rawRow.length > 0) {
        String dateStr = rawRow[0].trim();
        try {
            // 解析原日期字符串
            Date date = inputFormat.parse(dateStr);
            // 格式化为无斜杠的8位数字串
            String formattedDate = outputFormat.format(date);
            // 转成整数(用Long更安全,避免2038年后的日期溢出int)
            long mysqlDate = Long.parseLong(formattedDate);
            rawRow[0] = String.valueOf(mysqlDate);
        } catch (ParseException e) {
            // 处理格式错误的情况:比如跳过该行、记录错误日志
            System.err.println("无效日期格式:" + dateStr);
            e.printStackTrace();
        }
    }
    
    // 后续处理逻辑
}

额外注意事项

  1. 数据类型溢出:int类型的最大值是2147483647,对应日期2038-01-19,如果你的日期包含2038年之后的记录,MySQL字段建议用bigint,代码里用Long类型处理更稳妥。
  2. CSV分割问题:如果其他列里包含逗号(比如某列是"John, Doe"),用split(",")会把这列拆成两个元素,导致数据错乱。这种情况建议用专门的CSV解析库(比如OpenCSV)来读取,能正确处理带引号的字段。

内容的提问来源于stack exchange,提问作者Fortune Dludla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:03:09