gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:56:33 25 4
gpt4 key购买 nike

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

请注意,日期和年份仍必须包括在内,因为排序可能会持续几天、几年,但也可能在同一天出现多个项目实例。您会提出什么建议,或者是否有更好的方法来解决这个问题?此外,这必须适用于任何文化和任何时区。

编辑

在我的 MainPage 中,我用一组图片填充名为 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;
}
}

我有一个类将 DateTime 序列化和反序列化为图片的一个属性,它应用于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com