c# - 如何使用 DateTime.Now 函数

标签 c# sorting datetime

目前,我正在使用 DateTime.Now.ToLongDateString() 来设置日期属性,尽管我想更详细地了解日期。目的是根据项目的日期执行排序,当前将给出格式为 2013 年 7 月 4 日星期四 的日期。如果多个项目在同一天具有相同的日期属性,则不会执行排序。 DateTime.Now 是否有一个函数允许带有秒的日期属性?

需要注意的是,仍然必须包含日期和年份,因为排序可能会在几天内或几年内进行,但同一天也可能有该项目的多个实例。您有什么建议,或者有更好的方法来解决这个问题吗?此外,这必须适用于任何文化和任何时区。

编辑

在我的主页中,我使用一组图片填充名为Recent 的列表框。在我的“设置”页面中,用户可以选择升序或降序排序顺序,并且基于此,在填充列表框之前必须对集合进行相应排序。

MainPage.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;
        }
   }

我有一个类,将日期时间序列化和反序列化为图片的属性,该类应用于我试图排序的DateTaken

最佳答案

编辑2

好的,

您需要使用OrderByDescending函数的结果。

// listItems remains unaffected.
var sorted = listItems.OrderByDescending();

许多函数,尤其是作用于具有一定程度的不变性的结构的扩展,不会影响源。纯函数应该以“流畅”的方式使用。返回值需要赋值才能使用。

所以,你需要这样做,

Recent.ItemsSource = listItems.OrderBy(x => x.DateTaken).ToList();

值得考虑像 Resahrper 这样的工具捕捉这样的问题。他们是common with the DateTime Add functions .


编辑

因为您在多文化环境中工作,所以请确保所有日期均以 UTC 类型实例化和存储,这将对您有很大帮助。即使在单一时区工作,但跨夏令时边界排序。

使用 DateTime.UtcNow 代替 DateTime.Now,并将所有值保留为 UTC DateTime,直到它们导出或显示在 GUI 上.

这样您就可以将苹果与苹果进行比较,并且您的排序将按预期进行,并且您的数据将更容易调试。


如果您开始做任何复杂的事情,您将发现 .Nets DateTime 实现中的漏洞。它正在考虑使用 Jon Skeet 和其他人在 noda time 上的工作这应该克服许多陷阱。


这不适用于跨时区、日历或仅适用夏令时

如果出于某种原因您确实需要可排序的String,请使用 DateTime.Now.ToString("o");这将生成一个往返格式的字符串,

yyyy-MM-ddTHH:mm:ss.fffffff

它可以很好地排序,包括小数部分。假设所有值都来自相同的时区和日历。

关于c# - 如何使用 DateTime.Now 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474822/

相关文章:

c# - Web API .net core 2请求检查请求的 header 不为空

c# - 双向绑定(bind)到数据集 - 更新数据库?

jQuery 标题在用 div 制作的表中排序

java - Shell 排序 Java 示例

c# - 如何找到下一个 2 :00 am in . 网的确切日期

android - 如何在 Android 上禁用日期时间设置?

c# - 最接近期望值的记录的总和

c# - Crystal 报表 - 在公式中使用当前对象的值

sorting - table.sort 使用什么算法?

datetime - 如何将特定日期映射到Elasticsearch日期/时间字段?