如何使用DateTime.Now函数

时间:2013-07-04 16:26:34

标签: c# sorting datetime

目前我正在使用DateTime.Now.ToLongDateString()来设置日期属性,尽管我希望在日期中更加详细。目的是根据项目的日期执行排序,目前这将以Thursday, July 4, 2013格式给出日期。如果多个项目在同一天具有相同的日期属性,则不执行排序。是否有DateTime.Now函数允许日期属性为秒?

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

修改

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

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

我有一个类将SerialTime序列化和反序列化为Picture的属性,该属性应用于DateTaken,我试图按其排序。

8 个答案:

答案 0 :(得分:2)

直接使用DateTime对象。它会为您提供足以进行排序的日,月,年,小时,分钟,秒。

例如: -

var foo = collection.OrderBy(d => d.Date);

答案 1 :(得分:1)

直接按DateTime.Now排序,而不转换为字符串。如果您将DateTime直接存储在您的媒体资源中,则不会出现问题。

DateTime类型支持日期和时间到刻度线。

您也可以格式化日期,但选择进行显示,但通常最好在内部存储实际的DateTime

答案 2 :(得分:1)

编辑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类型存储,这将对您有所帮助。即使在单个时区工作,但在Day Light Saving Time boundries中进行排序。

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

通过这种方式,您可以将苹果与苹果进行比较,您的排序将按预期工作,您的数据将更容易调试。


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


这不适用于时区,日历或仅限日间节能

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

  

YYYY-MM-DDTHH:MM:ss.fffffff

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

答案 3 :(得分:0)

DateTime.Now.ToString()方法会为您提供一个包含所有内容的字符串。

但正如@SimonBelanger指出的那样,你应该直接在DateTime上排序,而不是在字符串表示上。

答案 4 :(得分:0)

如果需要序列化日期,而不是只对DateTime对象进行排序,可以尝试将其转换为unix时间(自Unix Epoch开始以来的毫秒数)。

stackoverflow.com/questions/9814060/...

由于它只是一个很长的时间,你可以轻松地对它进行排序,也可以将它存储在一个字符串中或长或任何其他内容。

答案 5 :(得分:0)

如果您可以按照Reed声明的那样直接按DateTime排序。但是,如果你不能,你会想要以非常具体的方式将其串起来。也许是这样的:

date.ToString("YYYYMMddHHmmss")

因为要以字符方式对日期进行排序,您需要按正确的顺序对日期的各个部分进行排序。

答案 6 :(得分:0)

您可以使用DateTime.Now.ToString("YYYYMMddHHmmss")DateTime.Now.Ticks

答案 7 :(得分:0)

如果您添加此段代码DateTime.Now.ToString();,则会打印7/4/2013 10:05:18 PM, 如果您添加string time = DateTime.Now.ToString("hh-mm-ss");,则会打印(10-07-36)。 在tostring方法中,您可以根据您的要求设置日期格式。