【问题标题】:Format string into Time from datatable C#从数据表 C# 将字符串格式化为时间
【发布时间】:2015-05-06 14:56:46
【问题描述】:

我正在从 excel 导入创建一个数据表并将其批量复制到数据库,我需要将 Scheduled Start as start time 作为时间 hh:mm:ss 放入数据库,但它会在 1899 年 12 月 30 日 10:30 继续进入数据库: 00,我想要的只是 10:30:00 进入数据库。我该怎么做?

我已尝试转换为 DateTime 然后格式化,但一直说它不是有效的 DateTime。

                using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con))
            {
                oda.Fill(dtExcelData);

            }
            excel_con.Close();


            if (dtExcelData.Rows.Count > 0)
            {
                foreach (DataRow rw in dtExcelData.Rows)
                {
                    //Creates StaffID
                     rw["StaffID"] = "00" + rw["Host Key of Staff"].ToString();

                    //Creates Start Time
                     rw["Scheduled Start as start time"] = rw["Scheduled Start as start time"].ToString("hh-mm");

                }
               // Response.Write(strConcate);
            }

【问题讨论】:

  • 使用正确的数据类型,所以使用日期时间而不是字符串。

标签: c# datetime time datatable


【解决方案1】:

你不能有一个没有日期和时间的 DateTime。如果您尝试省略时间,它可能会默认为午夜。如果您省略日期,它显然在数据库中默认为 1899 年 12 月 30 日。

如果您没有看到只有 Time 的列类型,则必须:

  • 对该列使用字符串或文本类型,并将时间存储为字符串,就像您当前尝试的那样,或者
  • 将该列保留为日期/时间,不必担心存储的日期部分

我会采用第二种方式,然后使用像.ToString("hh-mm") 这样的格式字符串,这样用户就只能看到您希望他们看到的部分。他们永远不会意识到你已经存储了一个日期。这样,您不必将时间存储为字符串,然后在不可避免地尝试使用它进行一些计算时需要将其操作回正确的格式。

【讨论】:

  • 所以我将数据库列类型设置为 DateTime 并将字符串更改为 DateTime?
  • 好的 所以我已经把日期作为 DateTime 并且它存储为 1899-12-30 01:00:00.000 我只想在 gridview 01:00 中向用户显示我该怎么做?我是否创建 sql 语句并从数据库中选择数据,但我该怎么做才能获得每个结果并将计划开始格式化为开始时间。对不起,我很痛苦
  • 不,不使用 WinForms :s 我应该吗?
  • 我正在使用带有 c# 和普通 gridview 的 asp.net。
  • Grant 效果很好,谢谢 :) .. 我欠你一个
【解决方案2】:

但一直说它不是有效的日期时间

我认为您在 db 中的字段是 DateTime 类型。这是您在 foreach 中所做的事情。您正在将其转换为“字符串”,现在您尝试保存字符串。将 db 字段从 DateTime 更改为 nchar或 nvarchar 并以您想要的方式以字符串格式存储时间。 现在每次从 db 获取数据时

【讨论】:

  • 我已经在数据库中尝试了字段作为 dateTime 和 nvarchar 没有任何区别。
【解决方案3】:

我相信你的问题在于这条线

rw["Scheduled Start as start time"] = rw["Scheduled Start as start time"].ToString("hh-mm");

如果 rw["Scheduled Start as start time"] 是我怀疑的 DateTime,那么您不能为它分配一个字符串......它是一个 DateTime,而不是一个字符串。它必须有完整的日期和时间。

您可以将类型更改为字符串并将日期时间存储在别处或将字符串存储在别处。

【讨论】:

  • 我不明白你的意思,无论我存储它有什么 DateTime 一直说是无效的 DateTime。不知道我做错了什么。
【解决方案4】:

试试这个

String.Format("{0:t}", dt); // "4:05 PM" 短时间 String.Format("{0:d}", dt); // “2008 年 3 月 9 日”短日期

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多