-1

我正在从数据库中读取信息,我真的只是对它的显示/排序方式有疑问。我想阅读日期时间,但我只想显示日期,我希望它从现在到未来排序。

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

4

4 回答 4

2

您可能希望分两步进行:

  1. 保留数据DateTimes并对其进行排序(您可以使用 LINQOrderByOrderByDescending)。
  2. 现在信息已排序,您可以使用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>包含按升序排列的格式化日期值。

于 2012-04-04T15:59:39.027 回答
2

格式化是一种显示功能,而不是业务逻辑。因此,格式化逻辑属于 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

(当然,添加任何其他有日期的列!)

于 2012-04-04T17:20:06.750 回答
1

好吧,没有 System.Date 类型,所以不幸的是你必须让它与 System.DateTime 一起工作。然而,这不是一个新问题,并且有已知的解决方案。

也许需要更多信息;你到底用什么来从表中提取记录,你用什么来保存这些记录,以及你是如何在检索背后构建数据库查询的?

如果您不关心日期/时间值的时间元素,您可以做的第一件事是将其截断为数据库查询的一部分。T-SQL 中的公式类似于:

   SELECT CONVERT(datetime, CONVERT(varchar(20), GetDate(), 101)) as Today

有些操作可以在不返回字符串的情况下为您提供相同的结果,在 SQL Server 2008 及更好的版本中,您可以转换为 Date 类型,但上述查询相对简洁,适用于任何 SQL Server 版本从 2000 年开始。

其次,如果您不能这样做(例如,您正在使用无法更改的存储过程),则 System.DateTime 上有一个可用的 Date 属性,它返回时间分量为零的值(例如,DateTime.Now.Date == DateTime.Today) . 如果您使用可以接受 lambda 的排序方法,例如 Linq 的 OrderBy() 或 List.Sort(),您可以投影该值而无需更改它。或者,如果您从不想处理该值,只需通过向下查看表并将列中的每个字段设置为其 Date 属性的值来更改它。如果其他人可能关心时间戳,请不要将这些值保存回数据库。

编辑评论:

System.DateTime 将始终具有时间组件。.NET 中的日期时间基于单个 Int64“Ticks”值。一个“滴答声”~= 100ns。您看到的所有与时间相关的属性,如小时、分钟、秒等,都是基于该刻度值计算的,“日期”组件的年、月和日也是如此。例如,可以通过从 Ticks 值开始计算 Seconds 属性,取模除以每分钟的 Ticks 数(6 亿),然后将结果除以每秒的 Ticks 数(1000 万)。

因此,根本不可能切断“日期”和“时间”的概念,因为它们都存储在相同的数值中。您可以做的最好的事情是指定一个 DateTime,它的 Ticks 数量可以被 864,000,000,000(24 小时内的 Ticks 数量)整除,以便时间属性的计算结果都为零。

于 2012-04-04T15:57:15.377 回答
0

我只是重做了页面并在gridview中构建了表格,而不是在代码中构建它......最后它更容易......不得不更改一些代码......但结果一切都很好......感谢所有的投入

于 2012-04-12T14:20:59.960 回答