【问题标题】:Converting dd/MM/yyyy input to yyyy-MM-dd in date format not varchar/datetime以日期格式将 dd/MM/yyyy 输入转换为 yyyy-MM-dd 而不是 varchar/datetime
【发布时间】:2025-11-20 13:50:02
【问题描述】:

搜索了一整天后,我无法找到解决方案,面临多个转换错误。主要目标是将dd/MM/yyyy 转换为yyyy-MM-dd“日期”格式以适应SQL Server。

我的表中有一个数据类型为date 的SQL Server 2012 数据库。

我在我的项目网站上使用带有 jquery-1.4.1-vsdoc.js 的 jQuery datepicker 输出 dd/MM/yyyy 这是使用

Dim dDate As DateTime = DateTime.Parse(Request.Form(txtStart.UniqueID))

然后我尝试使用获得的日期执行插入 SQL,但数据库日期格式为 yyyy-MM-dd

试过了,还是不行:

SELECT CONVERT(date, CONVERT(DATETIME, '14/10/2011', 0), 120)

试过了,它可以工作,但它是 varchar 数据类型,这不是我需要的

SELECT REPLACE(CONVERT(VARCHAR(10), '15/4/2014', 111), '/', '-')  AS [YYYY-MM-DD]

我真的需要我的网站上的代码 VB/C# 代码或 SQL 语句来实现这一点,请帮助

我使用 jQuery 的脚本已经在代码中编写了我的 sql 当前设置的格式,但是在运行时它不适用

<script type="text/javascript">
$(document).ready(function () {
    $("#<%=txtStart.ClientID %>").dynDateTime({
        showsTime: false,
        ifFormat: "%Y-%m-%d ",
        daFormat: "%l;%M %p, %e %m, %Y",
        align: "BR",
        electric: false,
        singleClick: false,
        displayArea: ".siblings('.dtcDisplayArea')",
        button: ".next()"
    });
});
</script>

【问题讨论】:

    标签: c# sql vb.net date type-conversion


    【解决方案1】:

    主要目标是将 dd/MM/yyyy 转换为 yyyy-MM-dd “日期”格式以适应 SQL

    不要!您应该尽可能避免字符串转换。尽可能多地保持数据的自然表示。

    您可能需要将日期从 dd/MM/yyyy 解析到 DateTime 开始(尽管如果您可以避免这种情况,请这样做 - 我们不知道您的数据来自哪里),但是您应该留下它作为DateTime。请改用参数化 SQL,将参数的值作为 DateTime 传递给数据库。当然,您应该确保数据库中的字段使用适当的类型开始(不是varchar)。确保您的架构与您的数据匹配对于运行一个健全的系统至关重要。

    解析部分应该比较简单。例如:

    DateTime date = DateTime.ParseExact(text, "dd/MM/yyyy",
                                        CultureInfo.InvariantCulture);
    

    可能想改用用户的文化(取决于数据的来源),而您可能想改用DateTime.TryParseExact(如果这是用户输入的数据,而不是机器对机器通信的数据)。

    【讨论】:

    • 谢谢,因为我已经尝试过 .parseExact,所以我会再次查看这个,它给了我一个编译错误。保留其日期格式是有道理的
    • @user2552331:如果它给出编译错误(而不是异常),那么您可能没有字符串开头...您应该用您尝试过的内容更新您的问题确切错误。请注意,我在 C# 中给出了代码,而您的问题使用的是 VB……希望您可以轻松地将我的 C# 转换为 VB。
    • 已尝试并给了我一个异常“字符串未被识别为有效的日期时间。” Dim dDate As DateTime = DateTime.ParseExact(Request.Form(txtStart.UniqueID).ToString, "dd/MM/yyyy", CultureInfo.InvariantCulture)
    • 不确定这是否与我获取日期时间的方式是使用 jquery datetimepicker 的事实有关
    • @user2552331:异常与编译时错误不同,我们不知道实际值是什么。所有这些信息(包括关于 jquery datetimepicker 的部分和失败的值)都应该在 question 中,而不是在 cmets 中。
    【解决方案2】:

    您必须记住,DateTime 没有格式。如果您想将某些日期字符串转换为 DateTime,并且如果您预先知道日期格式,则可以使用 DateTime.ParseExact()

    试试这个:

    string strDate = "21/04/2014";
    DateTime dt = DateTime.ParseExact(strDate,"dd/MM/yyyy",
                                                       CultureInfo.InvariantCulture);
    

    现在您可以将 DateTime 变量 dt 存储到数据库中,但如果您想以某种格式显示 DateTime,例如:yyyy-MM-dd,您需要调用 ToString(),如下所示

    String datetime = dt.ToString("yyyy-MM-dd");
    

    【讨论】:

    • 似乎我收到运行时错误“字符串未被识别为有效的日期时间。”
    • @user2552331:你在尝试我的代码吗?你能告诉我们你的代码吗?
    【解决方案3】:

    使用dateFormat 选项

    $(function(){
            $("#to").datepicker({ dateFormat: 'yy-mm-dd' });
            $("#from").datepicker({ dateFormat: 'yy-mm-dd' }).bind("change",function(){
                var minValue = $(this).val();
                minValue = $.datepicker.parseDate("yy-mm-dd", minValue);
                minValue.setDate(minValue.getDate()+1);
                $("#to").datepicker( "option", "minDate", minValue );
            })
        });
    

    演示here

    【讨论】:

    • 这是否意味着我必须替换我的 信息并使用您的编码?我只是从另一个来源复制并无法理解。
    • 当您在 javascript 中使用 datepicker 时,为什么不使用 javascript 日期格式。
    • 我已经指定了我想要的日期格式,问题是当检索到的日期在到达 SQL 查询时实际显示为 dd/MM/yyyy..
    • 现在你开心吗:):):)
    • 对不起.. 我试过代码,但它似乎适用于 java,不适用于 asp.net
    【解决方案4】:

    我们可以在使用 InvariantCulture 的同时尝试 ParseExact 方法。这提供了有关特定文化的信息。信息包括文化名称、书写系统(在您的情况下为 yyyy-MM-dd)等。

            String MyDateString;
            DateTime MyDateTime;
    
              MyDateString = txtDateOfIncidence.Text.Trim()+ " " + txtTiming.Text.Trim();
              MyDateTime = DateTime.ParseExact(MyDateString, "yyyy/MM/dd" + " hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);
    

    【讨论】: