如何使用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,我正试图根据它进行排序。

如何使用DateTime.Now函数

编辑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方法中,您可以根据需要设置日期格式。