从数据表 C# 将字符串格式化为时间
Format string into Time from datatable C#
我正在从 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);
}
but keeps saying it is not a valid DateTime
我认为您在数据库中的字段是 DateTime type.this 是因为您在 foreach.your 中正在将其转换为 'string',现在您尝试保存一个字符串。将 db 字段从 DateTime 更改为 nchar 或 nvarchar,并按照您想要的方式以字符串格式存储时间。
现在每次你从 db
获取数据
你不能没有日期和时间的日期时间。如果您尝试省略时间,它可能会默认为午夜。如果您省略日期,它显然在数据库中默认为 1899 年 12 月 30 日。
如果您没有看到只有时间的列类型,您必须:
- 对该列使用字符串或文本类型,并将时间存储为字符串,就像您当前尝试做的那样,或者
- 将列保留为 Date/Time,不用担心存储的日期部分
我会采用第二种方式,然后使用 .ToString("hh-mm")
之类的格式字符串,以便用户只看到您希望他们看到的部分。他们永远不会意识到您已经存储了日期。这样,您就不会将时间存储为字符串,然后在您不可避免地尝试使用它进行一些计算时需要将其操作回正确的格式。
我相信你的问题出在这一行
rw["Scheduled Start as start time"] = rw["Scheduled Start as start time"].ToString("hh-mm");
如果我怀疑 rw["Scheduled Start as start time"] 是一个 DateTime,那么您就不能为它分配一个字符串...它是一个 DateTime,而不是一个字符串。它必须有完整的日期和时间。
您可以将类型更改为字符串并将日期时间存储在其他地方或将字符串存储在其他地方。
试试这个
String.Format("{0:t}", dt); // "4:05 PM" 短时间
String.Format("{0:d}", dt); // "3/9/2008" ShortDate
我正在从 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);
}
but keeps saying it is not a valid DateTime
我认为您在数据库中的字段是 DateTime type.this 是因为您在 foreach.your 中正在将其转换为 'string',现在您尝试保存一个字符串。将 db 字段从 DateTime 更改为 nchar 或 nvarchar,并按照您想要的方式以字符串格式存储时间。 现在每次你从 db
获取数据你不能没有日期和时间的日期时间。如果您尝试省略时间,它可能会默认为午夜。如果您省略日期,它显然在数据库中默认为 1899 年 12 月 30 日。
如果您没有看到只有时间的列类型,您必须:
- 对该列使用字符串或文本类型,并将时间存储为字符串,就像您当前尝试做的那样,或者
- 将列保留为 Date/Time,不用担心存储的日期部分
我会采用第二种方式,然后使用 .ToString("hh-mm")
之类的格式字符串,以便用户只看到您希望他们看到的部分。他们永远不会意识到您已经存储了日期。这样,您就不会将时间存储为字符串,然后在您不可避免地尝试使用它进行一些计算时需要将其操作回正确的格式。
我相信你的问题出在这一行
rw["Scheduled Start as start time"] = rw["Scheduled Start as start time"].ToString("hh-mm");
如果我怀疑 rw["Scheduled Start as start time"] 是一个 DateTime,那么您就不能为它分配一个字符串...它是一个 DateTime,而不是一个字符串。它必须有完整的日期和时间。
您可以将类型更改为字符串并将日期时间存储在其他地方或将字符串存储在其他地方。
试试这个
String.Format("{0:t}", dt); // "4:05 PM" 短时间 String.Format("{0:d}", dt); // "3/9/2008" ShortDate