【问题标题】:Convert military time to regular time c# and sql [closed]将军事时间转换为常规时间c#和sql [关闭]
【发布时间】:2022-01-23 21:06:45
【问题描述】:

我正在开发一个 C# ASP.NET Webforms 应用程序,其中有一个小时列,但在我的数据库中,格式是 1020 而不是 10:20。我想将 1020 转换为小时格式。

我正在尝试这段代码:

public void BindGrid()
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["oscConnectionString"].ConnectionString);

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "SELECT servicio.callID AS ID, servicio.custmrName AS CLIENTE, servicio.customer AS CODIGO,  servicio.subject AS DESCRIPCION, servicio.createTime AS HORA, servicio.createDate AS FECHA, status.Name AS ESTADO FROM status INNER JOIN servicio ON status.statusID = servicio.status WHERE (servicio.status = 1) ";  /*-1 OR servicio.status = 9*/
    cmd.Connection = con;

    con.Open();

    SqlDataReader dr = cmd.ExecuteReader();

    GridView1.DataSource = dr;
    GridView1.DataBind();
}

protected string handle(object text)
{
    DateTime dateTime = Convert.ToDateTime(text); 
    return dateTime.ToShortTimeString();
}

但是当我尝试这个时,我得到了错误

不是日期时间有效格式

无法将 Int16 转换为日期时间

这是我前面的代码

<asp:GridView ID="GridView1" runat="server" 
     BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" 
     BorderWidth="1px" Width="100%" CellPadding="4" 
     ForeColor="Black" GridLines="Horizontal">
    <Columns>
        <asp:TemplateField HeaderText="Hora">
            <ItemTemplate>
                <%# handle(Eval("Hora"))%>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

感谢您的帮助

【问题讨论】:

  • 除非您将日期和时间存储为文本,否则数据库没有日期和时间的“格式”。格式化日期和时间是表示层的问题,而不是数据库或 SQL 的问题。
  • 请编辑您的问题以避免出现 大量 的空白垂直空格。问问自己,如果您试图回答问题,您希望如何阅读代码,然后对其进行编辑,使其看起来像这样。
  • 此外,您发布的代码将泄漏SqlConnection 句柄,因为您没有关闭/处置打开的连接。
  • 永远不要使用 Convert.ToDateTime(),因为它无法控制值的解析方式。相反,您应该使用 DateTime.TryParseExact 或类似名称。 (事实上​​,完全避免使用 Convert 类,除了它的 Base64 方法)。
  • 当你说“在数据库中的格式是”时——更重要的问题是……它是什么数据类型?诠释?字符串?

标签: c# asp.net webforms


【解决方案1】:

正如你写的 1020,我认为它的数据类型是 INT

你可以尝试这样解析

DateTime dt = DateTime.Parse(text.ToString());

如果它不起作用,那么试试这个

DateTime dateTime;
if(DateTime.TryParseExact(text.ToString(), "yyyyMMdd", 
                          CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dateTime))

然后将 DateTime 转换为字符串(如果需要)

string ConvertedDateTime = dt.ToString("yyyy:MM:dd", CultureInfo.InvariantCulture);

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 2017-09-04
    • 2017-08-29
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多