【问题标题】:How to get SQL Server datetime value as it is in 24 hours in C#如何在 C# 中获取 24 小时内的 SQL Server 日期时间值
【发布时间】:2013-11-18 13:33:03
【问题描述】:

我正在 VS2010 c# 中开发一个应用程序来从 SQLServer 获取单行数据并将其插入 MySQL。

我有一个列名为 Date_Time 的表,其中包含 24 小时内的日期和时间。格式如下图所示。

获取代码如下。

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        s_name = (dr["s_name"].ToString());
        s_city = (dr["s_city"].ToString());
        s_address = (dr["s_address"].ToString());
        s_added_date = (dr["s_added_date"].ToString());
        s_added_by = (dr["s_added_by"].ToString());
    }

当我打印 s_added_date 的值时,它给了我

我的问题是它为什么会这样显示,我如何才能在 24 小时内获得这个时间。格式。

请帮忙解决。

提前致谢。

【问题讨论】:

标签: c# sql sql-server datetime


【解决方案1】:

我有一个列名为 Date_Time 的表,其中包含 24 小时内的日期和时间。格式

不,您有一个列类型为DateTime 的表。这些值本身没有任何格式 - 它们只是碰巧在 SQL 结果查看器中以一种方式显示,这与 .NET 默认格式化它们的方式不同。

了解这里的数据只是日期和时间而不是格式非常重要。

要以特定方式对其进行格式化,请将其转换为 DateTime,然后使用允许您指定格式的 ToString 重载:

DateTime addedDate = (DateTime) sr["s_added_date"];
string addedDateText = addedDate.ToString("dd-MMM-yyyy HH:mm:ss",
                                          CultureInfo.InvariantCulture);

有关详细信息,请参阅 standard date/time formattingcustom date/time formatting 上的 MSDN 文章。

但是,如果目的只是将其插入 MySQL,则根本不应该将其转换为字符串 。只需将参数值作为参数直接传递到适当的 MySQL 命令中。添加字符串转换只会增加混乱。尽可能将数据保留为“自然”类型——在本例中为DateTime

【讨论】:

    【解决方案2】:

    以下行:

    s_added_date = (dr["s_added_date"].ToString());
    

    s_added_date = (dr["s_added_date"].ToString("dd/MM/yyyy HH:mm:ss"));
    

    您的代码将是:

    SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            s_name = (dr["s_name"].ToString());
            s_city = (dr["s_city"].ToString());
            s_address = (dr["s_address"].ToString());
            s_added_date = (dr["s_added_date"].ToString("dd/MM/yyyy hh:mm:ss"));
            s_added_by = (dr["s_added_by"].ToString());
        }
    

    如果您希望它为 2013 年 11 月 11 日 10:23:25 格式:

     s_added_date = (dr["s_added_date"].ToString("dd-MMM-yyyy hh:mm:ss"));
    

    【讨论】:

    • @JonSkeet 但在这种情况下我们不需要写 hh?因为我只提到了你的答案:stackoverflow.com/questions/15837609/…
    • 我不明白你在问什么。 hh 是 12 小时,HH 是 24 小时。 OP 想要 24 小时格式,所以他应该有 HH... 虽然我不相信他实际上应该格式化值。
    • @JonSkeet 他有 24 小时格式,并希望采用 12 小时格式,这就是我从问题中了解到的
    • 我建议你重新阅读这个问题。他在 SQL Server 中看到了 24 小时格式(以某种形式),但在他的应用程序中看到了 12 小时格式:“当我打印 s_added_date 的值时,它给了我 s_added_date 的值我的问题是为什么它会这样显示,我怎么能得到这个24 小时制时间。”
    • @JonSkeet 哦,是的,对不起,完全是我在阅读和理解问题时的错误,非常感谢
    【解决方案3】:

    试试这个

    SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, DATE_FORMAT(s_added_date,'%T'), s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
    
     SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            s_name = (dr["s_name"].ToString());
            s_city = (dr["s_city"].ToString());
            s_address = (dr["s_address"].ToString());
            s_added_date = (dr["s_added_date"].ToString());
            s_added_by = (dr["s_added_by"].ToString());
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 2016-10-26
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多