【问题标题】:How to format mssql datetime column to display only time on web page input field?如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?
【发布时间】:2014-02-15 13:30:36
【问题描述】:

使用 ASP.NETMSSQL

我有简单的日期时间列

输出: 1900-01-01 00:00:00.000

我知道在 sql 中我可以做到:

CONVERT(VARCHAR(8),GETDATE(),108)

输出: 00:00:00

另外dataformatstring="{0:MMMM d, yyyy}" 似乎不适用于输入字段。


我听到了强烈的反对意见,要求不要在 sql 中转换,而是在网页上使用 formatting


问题

考虑到这一点,将附加到输入字符串的日期时间完全格式化为时间有什么好的做法?

理想的输出是: 00:00

我在这里阅读了很多问题,但没有找到针对输入字段时间的特定问题的问题。

【问题讨论】:

    标签: c# html asp.net sql-server datetime


    【解决方案1】:

    使用Convert,您可以将字符串转换为Date 并使用.ToString("t") 格式化

    c#

    var aDate = Convert.ToDateTime("1900-01-01 00:00:00.000");
    Console.WriteLine(aDate.ToString("t"));
    

    vb

    Dim aDate = Convert.ToDateTime("1900-01-01 00:00:00.000")
    Console.WriteLine(aDate.ToString("t"))
    

    这会输出00:00

    如果你想要毫秒,你可以使用大写的 T。

    查看这里了解更多信息:

    http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx

    http://msdn.microsoft.com/en-us/library/8tfzyc64(v=vs.110).aspx

    【讨论】:

    • 这个可以添加到 asp:textbox 字段中,而不是后面的代码或 java 中吗?
    • 我想这取决于你如何绑定它。您是否在考虑 Web 表单中的网格视图?这是一个例子:stackoverflow.com/questions/14029338/…
    • 它还有一个绑定列,您可以直接在 html 标记中指定,看看这里。 msdn.microsoft.com/en-us/library/…
    • 谢谢@hutchonoid 我知道 dateformatstring 但在边界域之外没有工作。您的回答可以完成工作,但是我意识到只需添加 type="time" 即可完成相同的工作。不过感谢您的帮助。
    • SQL Server 2012 及大约支持 FORMAT 命令。但是,它比本机 TSQL 慢,因为它使用需要在调用期间加载的 CLR。它具有与 dataformatstring 相同的选项。
    【解决方案2】:

    为什么不在数据库端进行转换呢?您不执行 SELECT * 因为它会发送更多数据。那么,为什么不用更大的硬件,由数据库服务器来完成这项工作呢?

    这是执行您需要的 TSQL 代码。

    -- date time variable
    declare @dt as datetime;
    set @dt = getdate();
    print @dt
    
    -- just return time as string
    declare @txt as varchar(8);
    set @txt = cast(@dt as time);
    print @txt
    
    -- sample use in query
    select 
      cast(cast(getdate() as time) as varchar(8)) as answer
    

    消息窗口输出。

    Jan 24 2014  9:23AM
    09:23:47
    

    结果窗口输出。

    我选择返回秒数。如果这不是业务规则,请更改为 varchar(5)。

    【讨论】:

    • 我通常会这样做,但正如我所提到的,我听到过激烈的争论。
    • 请发布一些链接。我是一名 DBA/ETL 人员,但从 SW DEV 开始。我已经完成了 C# 和 ASP .NET 的分享。总是喜欢学习。
    • 抱歉,芽看找不到帖子了。他们都在stackoverflow上......某处。
    【解决方案3】:

    我找到了一个简单的解决方案。只需添加属性类型。这也应该适用于普通的 html 输入字段。

    <asp:TextBox ID="Time" RunAt="Server" type="time"/>
    

    注意:这可能不完全兼容跨浏览器。 尽管我的测试似乎另有说明。 Firefox 不支持 type 字段,但格式如下。


    输入

    1900-01-01 00:00:00.000

    type="time"
    

    输出为:

    00:00:00

    type="date"
    

    输出为:

    1900-01-01

    【讨论】:

    • 很好,从来不知道你能做到这一点。我已经有一段时间没有使用 Web 表单了,现在都是 MVC,但很高兴知道。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2015-09-14
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2019-08-29
    • 2017-03-26
    相关资源
    最近更新 更多