只需要表中字段中的日期,而不需要完整的日期时间
本文关键字:日期 不需要 时间 字段 | 更新日期: 2023-09-27 18:29:56
我正在从数据库中读取信息,但我真的只是对信息的显示/排序有问题。我想读取日期时间,但我只想显示日期,我希望它从现在到将来排序。
nextreview.DataType = System.Type.GetType("System.DateTime");
这就是我现在所拥有的,但这包括时间,但我不需要它,也希望它消失。
以前有这个:
nextreview.DataType = System.Type.GetType("System.String");
当读取时…将字符串转换为我想要的显示
ToString("MM/dd/yyyy")
这是完美的,除了在分类方面。
那么,关于如何将其显示为"mm/dd/yyyy",但仍被视为日期时间,有什么帮助吗?用c#和asp.net实现网页
这是感兴趣的人的代码http://pastebin.com/WQBUyrQT
您可能希望分两步完成:
- 将数据保留为
DateTimes
并对其进行排序(可以使用LINQ的OrderBy
或OrderByDescending
) - 现在已经对信息进行了排序,可以对每个成员使用
ToString("MM/dd/yyyy")
方法将其转换为仅限"日期"的字符串。您可以使用LINQ的Select
方法来执行此操作
例如:
var myData = // get info from DB;
var sortedData = myData.OrderBy(a => a.DateProperty);
var stringData = sortedData.Select(a => a.ToString("MM/dd/yyyy");
stringData
现在是IEnumerable<string>
,它包含按升序排列的格式化日期值。
格式化是显示的功能,而不是业务逻辑。因此,的格式化逻辑属于UI。
既然您已经标记了这个问题asp.net
,我建议您调查DataFormatString属性(或者,在xml中,属性)。我认为您要查找的具体值是"{0:d}"
。
从您的示例代码中,您似乎可以将此代码添加到Page_Load()
处理程序底部附近的某个位置:
((BoundField)gvEmployeeReview.Columns[1]).DataFormatString = "{0:d}"; //date hired column
((BoundField)gvEmployeeReview.Columns[8]).DataFormatString = "{0:d}"; //next review column
(当然,还可以添加任何其他有日期的列!)
好吧,没有System.Date类型,所以不幸的是,你必须让它与System.DateTime一起工作。然而,这不是一个新问题,而且有已知的解决方案。
也许还需要更多的信息;您究竟用什么从表中提取记录,用什么保存这些记录,以及如何在检索后构建数据库查询?
如果您不关心日期/时间值的时间元素,那么您可以做的第一件事就是将其截断为DB查询的一部分。T-SQL中的公式看起来像:
SELECT CONVERT(datetime, CONVERT(varchar(20), GetDate(), 101)) as Today
有些操作可以在不返回字符串的情况下为您提供相同的结果,在SQL Server 2008及更好的版本中,有一个日期类型可以强制转换为,但上述查询相对简洁,适用于2000年以后的任何SQL Server版本。
其次,如果你不能做到这一点(比如说你使用的是一个无法更改的存储过程),那么System.DateTime上有一个Date属性,它会返回时间分量为零的值(例如,DateTime.Now.Date == DateTime.Today
)。如果您使用的排序方法可以接受lambda,例如Linq的OrderBy()或List.Sort(),您可以投影该值,而无需更改它。或者,如果您从不想处理该值,只需通过下表并将列中的每个字段设置为其Date属性的值来更改它。如果其他人可能关心时间戳,请不要将这些值保存回DB。
从评论编辑:
System.DateTime将始终具有时间组件。.NET中的日期时间基于一个Int64"Ticks"值。一个"刻度"~=100ns。您看到的所有与时间相关的属性,如小时、分钟、秒等,都是基于该Ticks值计算的,"日期"组件的年、月和日也是如此。例如,Seconds属性的计算方法是从Ticks值开始,取模除以每分钟Ticks的数量(6亿),然后将结果除以每秒Ticks数量(1000万)。
因此,根本不可能割裂"日期"answers"时间"的概念,因为它们都存储在同一个数值中。你能做的最好的事情就是指定一个日期时间,它的刻度数可以被864000000000(24小时内的刻度数)整除,这样时间属性的值都为零。
我只是重新定义了页面并在gridview中构建了表,而不是在代码中构建它。。。最后,事情变得简单多了。。不得不更改一些代码。。。但结果一切都很好。。感谢所有的输入