C# 返回日期,不带时间,但不是字符串类型,而是日期类型
我有一个日期值,我想从中提取时间。我希望退货类型是日期类型,因为我想订购我拥有的日期列表。将列表设置为表示日期的字符串不会返回正确的顺序。 我知道DateTime总是返回带有时间的日期。我的选择是什么?如果没有时间,我如何改进代码并拥有日期类型的项目列表 编辑:我只想知道日期。之后什么都没有。类似于2016年7月8日,而不是2016年7月8日00:00:00或日期后的任何事情。在日期对象中 这是我的密码:C# 返回日期,不带时间,但不是字符串类型,而是日期类型,c#,linq,asp.net-mvc-4,stored-procedures,C#,Linq,Asp.net Mvc 4,Stored Procedures,我有一个日期值,我想从中提取时间。我希望退货类型是日期类型,因为我想订购我拥有的日期列表。将列表设置为表示日期的字符串不会返回正确的顺序。 我知道DateTime总是返回带有时间的日期。我的选择是什么?如果没有时间,我如何改进代码并拥有日期类型的项目列表 编辑:我只想知道日期。之后什么都没有。类似于2016年7月8日,而不是2016年7月8日00:00:00或日期后的任何事情。在日期对象中 这是我的密码: using (var db = new MyModel.Context())
using (var db = new MyModel.Context())
{
var cert = (
from tr in db.uspTranscripts(personId)
from a in db.PersonTranscripts.Where(x => x.UPID == personId)
from b in db.LU_CreditType.Where(x => x.ID == a.CreditTypeID)
select new CertViewModel
{
ActivityTitle = tr.ActivityTitle,
Score = tr.Score,
Status = tr.Status,
CompletionDate = tr.CompletionDate,
CretitTypeName = b.ShortName,
CompletedDateSorted = a.HK_CreatedOn
}).OrderByDescending(x => x.CompletedDateSorted).ToList();
List<CertViewModel> certlist = cert;
foreach (var item in certlist)
{
string itemWithoutHour = item.CompletionDate.Value.ToShortDateString();
var itemConverted = DateTime.ParseExact(itemWithoutHour, "M/d/yyyy", null);
item.CompletionDate = itemConverted;
}
return certificateslist.GroupBy(x => x.ActivityTitle).Select(e => e.First()).ToList();
}
使用(var db=new MyModel.Context())
{
var证书=(
来自数据库中的tr.usptracts(personId)
从db.personTransscripts.Where(x=>x.UPID==personId)中的
从db.LU_CreditType.Where中的b开始(x=>x.ID==a.CreditTypeID)
选择新的CertViewModel
{
ActivityTitle=tr.ActivityTitle,
分数,
地位,
CompletionDate=tr.CompletionDate,
CretitTypeName=b.ShortName,
CompletedDateSorted=a.HK\u CreatedOn
}).OrderByDescending(x=>x.CompletedDateSorted).ToList();
List certlist=证书;
foreach(certlist中的var项)
{
string itemWithoutHour=item.CompletionDate.Value.ToSortDateString();
var itemConverted=DateTime.ParseExact(itemWithoutHour,“M/d/yyyy”,null);
item.CompletionDate=itemConverted;
}
返回certificateslist.GroupBy(x=>x.ActivityTitle)。选择(e=>e.First()).ToList();
}
对于任何给定的日期时间
对象,您可以引用以去除时间值:
var withTime = DateTime.Now; // 8/7/2016 22:11:43
var withoutTime = withTime.Date; // 8/7/2016 00:00:00
.NET framework没有仅日期对象 也许有必要了解
DateTime
结构的工作原理。在内部,它将自1/01/0001 12:00 am以来的偏移量以刻度(1刻度=100纳秒)为单位存储在单个64位无符号整数中。(1滴答=100纳秒)
然后,DateTime
结构为处理日期和时间提供了许多有用的方法和属性,例如向现有日期添加一些天,或者计算两次的差值。一个有用的属性是Date
,它将DateTime
对象向下舍入到最近的一天(上午12:00)
日期、时间和带时间的日期都非常相似,主要区别在于如何设置它们的格式,一个带时间的日期如果省略了时间,就只是一个日期
David建议您在内部使用DateTime
结构,使用Date
属性剥离任何时间,对DateTime
进行排序,比较并将其修改为DateTime
对象
仅在需要显示时将其转换为
字符串
,此时您可以使用ToSortDateString()
或ToString(字符串格式)
等方法仅显示日期。但它仍将时间显示为00:00:00。我想要一些2016年8月7日的东西,之后什么都不要。@Francky:ADateTime
对象本身不显示任何东西。如何在UI中显示值完全是一个独立的问题。如果要在没有时间的情况下显示它,请在没有时间的情况下显示它。但是DateTime
类型具有这些属性。如果您想要一个没有这些属性的类型,我想您需要定义自己的类型。整个过程就是能够在没有时间的情况下显示它。我可以去掉时间部分,但必须将其转换为字符串,因此我们回到相同的问题,即使用日期,而不是字符串。这里主要关心的是能够对列表进行排序。将其转换为字符串将返回不正确的排序列表。@弗兰基:同样,您可以随意显示该值。有许多选项可以按照您的喜好格式化输出:只需对DateTime
值执行排序,并且在显示时使用您喜欢的任何显示字符串。这听起来真的不是问题。重复,已在中回答