从数据表C#格式化字符串到时间

时间:2015-05-06 14:56:46

标签: c# datetime time datatable

我正在从excel导入创建一个数据表并将其批量复制到数据库,我需要将Scheduled Start as start time放入数据库中,时间为hh:mm:ss但是它会继续进入数据库,因为30/12/1899 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);
            }

4 个答案:

答案 0 :(得分:0)

  

但一直说它不是有效的DateTime

我认为db中的字段是DateTime类型。这是你在foreach中所做的。你将它转换为'字符串',现在你尝试保存字符串。将db字段从DateTime更改为nchar或nvarchar并以您希望的方式以字符串格式存储时间。 现在每次从db

获取数据

答案 1 :(得分:0)

如果没有日期和时间,则无法拥有DateTime。如果你试图省略时间,它可能会默认为午夜。如果省略日期,则显然默认为数据库中的1899年12月30日。

如果您没有仅查看时间的列类型,则必须:

  • 为该列使用字符串或文本类型,并将时间存储为您当前正在尝试执行的字符串,或者
  • 将列保留为日期/时间,不要担心存储的日期部分

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

答案 2 :(得分:0)

我相信你的问题在于这一行

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

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

您可以将类型更改为字符串并将日期时间存储在其他位置或将字符串存储在其他位置。

答案 3 :(得分:-1)

尝试这个

String.Format(“{0:t}”,dt); //“下午4:05”短时间 String.Format(“{0:d}”,dt); //“3/9/2008”ShortDate