繁体   English   中英

将 dd/MM/yyyy 输入转换为日期格式的 yyyy-MM-dd 而不是 varchar/datetime

[英]Converting dd/MM/yyyy input to yyyy-MM-dd in date format not varchar/datetime

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

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

我在我的项目网站上使用带有 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>

主要目标是将 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 (如果这是用户输入的数据而不是机器对机器通信的数据)。

您必须记住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");

使用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 );
        })
    });

演示在这里

我们可以在使用 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM