如何使用DateTime.Now函数
本文关键字:函数 Now DateTime 何使用 | 更新日期: 2023-09-27 18:21:07
目前我正在使用DateTime.Now.ToLongDateString()
来设置日期属性,尽管我希望在日期中更详细。其目的是根据项目的日期执行排序,目前将给出格式为Thursday, July 4, 2013
的日期。如果多个项目在同一天具有相同的日期属性,则不会执行排序。有DateTime的函数吗?现在它将允许一个带秒的日期属性?
需要注意的是,日期和年份仍然必须包括在内,因为排序可能在几天内、几年内发生,但也可能在同一天发生多个项目。你有什么建议,或者有更好的方法吗?此外,这必须适用于任何文化和任何时区。
编辑
在我的主页中,我正在用一组图片填充一个名为Recent
的ListBox。在我的"设置"页面中,用户可以选择升序或降序,在此基础上,在填充列表框之前,必须对集合进行相应的排序。
主页.xaml.cs
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ObservableCollection<Selfie.Models.Picture> listItems = new ObservableCollection<Selfie.Models.Picture>(PictureRepository.Instance.Pictures);
if (Settings.AscendingSort.Value)
{
listItems.OrderBy(x => x.DateTaken);
Recent.ItemsSource = listItems;
}
else
{
listItems.OrderByDescending(x => x.DateTaken);
Recent.ItemsSource = listItems;
}
}
我有一个类,它将DateTime序列化和反序列化为图片的一个属性,该属性应用于DateTaken
,我正试图根据它进行排序。
编辑2
好吧,
您需要使用OrderByDescending
函数的结果。
// listItems remains unaffected.
var sorted = listItems.OrderByDescending();
许多函数,特别是以一定程度的不变性作用于结构的扩展,不会影响源。纯函数应该以"流畅"的风格使用。需要对返回值进行分类才能使用。
所以,你需要做,
Recent.ItemsSource = listItems.OrderBy(x => x.DateTaken).ToList();
值得考虑像Resahrper这样的工具来捕捉这样的问题。它们与DateTime
Add
函数是通用的。
编辑
因为你在一个多文化的环境中工作,确保你所有的日期都是用UTC类型实例化和存储的,这将对你有很大帮助。即使在一个时区工作,但在白天进行分类也会节省时间。
使用DateTime.UtcNow
而不是DateTime.Now
,并将所有值保留为UTC DateTime
s,直到它们被导出或显示在GUI上。
通过这种方式,您将比较苹果和苹果,您的排序将按预期进行,您的数据将更容易调试。
如果你开始做任何复杂的事情,你会发现.Net DateTime
实现中的漏洞。它正在考虑使用Jon Skeet和其他人在诺达时间的工作,这应该可以克服许多坑落。
这不适用于时区、日历或仅适用于日光节约
如果您出于某种原因确实需要一个可排序的String
,请使用DateTime.Now.ToString("o");
,这将在往返格式中生成一个字符串,
yyyy-MM-ddTHH:MM:ss.fffffff
这是很好的排序,包括一部分。假设所有值都来自同一时区和日历
只需直接按DateTime.Now
排序,而无需转换为字符串。如果您将DateTime
直接存储在您的房产中,这将不是问题。
DateTime
类型支持一直到刻度的日期和时间。
您也可以格式化日期,但您选择显示,但通常最好在内部存储实际的DateTime
。
只需直接使用DateTime
对象。它会给你一天、一个月、一年、一小时、几分钟、几秒钟的时间,这些时间足以完成你的任务
例如:-
var foo = collection.OrderBy(d => d.Date);
DateTime.Now.ToString()
方法将为您提供一个格式化了所有内容的字符串。
但正如@SimonBelanger所指出的,您可能应该直接根据DateTime进行排序,而不是根据字符串表示。
如果您需要序列化日期,而不是只对DateTime对象进行排序,您可以尝试将其转换为unix时间(自unix Epoch开始以来的毫秒数)。
stackoverflow.com/questions/9814060/…
由于它只是一个long,所以您可以很容易地对它进行排序,也可以将它存储在字符串或long或其他类型中。
如果您可以像Reed所说的那样直接按DateTime排序,请执行此操作。然而,如果你做不到,你会想用一种非常具体的方式把它串出来。也许是这样的:
date.ToString("YYYYMMddHHmmss")
因为要以字符的方式对日期进行排序,您需要按正确的顺序对日期的各个部分进行排序。
您可以使用DateTime.Now.ToString("YYYYMMddHHmmss")
或DateTime.Now.Ticks
如果添加这段代码DateTime.Now.ToString();
,它将打印7/4/2013 10:05:18 PM
,如果添加string time = DateTime.Now.ToString("hh-mm-ss");
,它将打印(10-07-36)
。在tostring方法中,您可以根据需要设置日期格式。