如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?
Posted
技术标签:
【中文标题】如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?【英文标题】:How to format mssql datetime column to display only time on web page input field? 【发布时间】:2014-02-15 13:30:36 【问题描述】:使用 ASP.NET 和 MSSQL
我有简单的日期时间列
输出: 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
我在这里阅读了很多问题,但没有找到针对输入字段时间的特定问题的问题。
【问题讨论】:
【参考方案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 表单中的网格视图?这是一个例子:***.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 的分享。总是喜欢学习。 抱歉,芽看找不到帖子了。他们都在***上......某处。【参考方案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,但很高兴知道。以上是关于如何格式化 mssql 日期时间列以仅在网页输入字段上显示时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改引导 datetimepicker 以仅显示日期而不显示时间