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

字符串转DateTime失败求助:SQL文本字段日期转换报错

解决字符串转DateTime报错“String not in datetime format”的方案

你现在的转换逻辑完全走偏了——把日期字符串去掉斜杠转成整数再转DateTime的做法根本不对,Convert.ToDateTime(int)是把整数当成OLE自动化日期值(从1899-12-30开始算的天数),不是你以为的数字格式日期(比如20240520这种),这才是报错的根源。

给你几个靠谱的解决步骤:

1. 先搞清楚数据库里的日期格式

首先得确定expiringdate字段存的字符串到底是什么格式,比如是MM/dd/yyyy(月/日/年)、dd/MM/yyyy(日/月/年)还是yyyy-MM-dd?这是正确转换的前提。

2. 正确的转换代码

最稳妥的方式:用DateTime.TryParseExact指定格式

这种方式明确告诉程序日期字符串的格式,不会因为系统地区设置出问题:

using System.Globalization;

// ... 原有数据库连接代码 ...

if (dataReaderxxasdf.HasRows)
{
    string gotttenoldexp = dataReaderxxasdf["expiringdate"].ToString();
    conn.Close();

    // 这里替换成你数据库实际的日期格式,比如"dd/MM/yyyy"
    string targetFormat = "MM/dd/yyyy";
    if (DateTime.TryParseExact(gotttenoldexp, targetFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime oldExpDate))
    {
        // 转换成功后加30天,再格式化输出
        DateTime newExpDate = oldExpDate.AddDays(30);
        string expiringdated = newExpDate.ToString("MM/dd/yyyy");
        MessageBox.Show(expiringdated);
    }
    else
    {
        MessageBox.Show($"转换失败:当前日期格式不对,内容是{gotttenoldexp}");
    }
}

退而求其次:用DateTime.TryParse自动识别(不推荐)

如果你不确定格式,可以用这个方法尝试,但依赖系统的区域设置,可靠性不如上面的:

if (dataReaderxxasdf.HasRows)
{
    string gotttenoldexp = dataReaderxxasdf["expiringdate"].ToString();
    conn.Close();

    if (DateTime.TryParse(gotttenoldexp, out DateTime oldExpDate))
    {
        DateTime newExpDate = oldExpDate.AddDays(30);
        string expiringdated = newExpDate.ToString("MM/dd/yyyy");
        MessageBox.Show(expiringdated);
    }
    else
    {
        MessageBox.Show($"无法识别这个日期:{gotttenoldexp}");
    }
}

3. 两个重要建议

  • 赶紧改数据库设计:别用text存日期了,MySQL有专门的DATE或DATETIME类型,读取的时候直接拿DateTime,根本不用转来转去。
  • 你的SQL有注入风险:直接把membersecretid拼到SQL里是高危操作,换成参数化查询:
string querysasds = "Select * from paymentrecord Where deleted='No' and membersecretid=@membersecretid order by id desc limit 1";
MySqlCommand cmasddaa = new MySqlCommand(querysasds, conn);
cmasddaa.Parameters.AddWithValue("@membersecretid", membersecretid);

内容的提问来源于stack exchange,提问作者Bluevels Technology

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:52:04