2

DateTime プロパティを持つオブジェクトのリストが必要で、最も近い日付を持つオブジェクトがDateTime.Nowリストの最初になるように、このリストを並べ替える必要があります。

私は次のことを試しました:

nodes.Sort((x, y) => DateTime.Compare(
         DateTime.Now, 
         DateTime.Parse(x.GetProperty("date").Value)));

しかし、これは正しい結果を返しません。

これを行う良い方法を知っている人はいますか?:-)

4

5 に答える 5

8

ノードの時刻と現在の時刻の絶対差で並べ替えることができます。DurationメソッドTimeSpanを使用してa の絶対時間を取得できます。

DateTime now = DateTime.Now;
var ordered = nodes.OrderBy(n => (now - DateTime.Parse(n.GetProperty("date").Value)).Duration())
于 2013-07-17T11:35:03.690 に答える
2

OrderByDescendingを試しましたか?

nodes.OrderByDescending(x => DateTime.Parse(x.GetProperty("date").Value));

これがまさにあなたが求めているものかどうかはわかりませんが、リストを最新の日付で並べ替えるだけであれば、これでうまくいきます.

于 2013-07-17T11:34:53.507 に答える
0
from node in nodes
let diff = Math.Abs(DateTime.Now.Subtract(node.DateTime).TotalSeconds)
order by diff
select date
于 2013-07-17T11:36:36.597 に答える
0

どうですか

nodes.Sort((x,y) => Math.Abs((DateTime.Now, DateTime.Parse(x.GetProperty ("date").Value).Ticks))
于 2013-07-17T11:36:59.630 に答える
0
class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        var recs = p.ReadVisitorsByMonthly();
        Console.WriteLine();

        foreach (var r in recs)
        {
            Console.WriteLine(r);
        }

        Console.ReadLine();
    }

    public List<string> ReadVisitorsByMonthly()
    {
        Dictionary<int, int> retL = new Dictionary<int, int>();
        List<DateTime> liste = new List<DateTime>();
        List<string> ret = new List<string>();

        liste.Add(new DateTime(2016, 4, 1));
        liste.Add(new DateTime(2016, 4, 4));
        liste.Add(new DateTime(2016, 4, 5));
        liste.Add(new DateTime(2016, 4, 2));
        liste.Add(new DateTime(2016, 4, 3));
        liste.Add(new DateTime(2015, 11, 6));
        liste.Add(new DateTime(2015, 12, 7));
        liste.Add(new DateTime(2015, 12, 8));
        liste.Add(new DateTime(2015, 11, 4));
        liste.Add(new DateTime(2015, 12, 4));
        liste.Add(new DateTime(2016, 5, 1));
        liste.Add(new DateTime(2016, 5, 6));
        liste.Add(new DateTime(2016, 5, 2));
        liste.Add(new DateTime(2016, 5, 3));
        liste.Add(new DateTime(2016, 2, 8));
        liste.Add(new DateTime(2016, 2, 6));
        liste.Add(new DateTime(2016, 2, 2));
        liste.Add(new DateTime(2016, 2, 1));
        liste.Add(new DateTime(2016, 1, 3));
        liste.Add(new DateTime(2016, 3, 5));
        liste.Add(new DateTime(2016, 3, 4));
        liste.Add(new DateTime(2016, 3, 7));
        liste.Add(new DateTime(2016, 3, 3));
        liste.Add(new DateTime(2016, 3, 5));



        var list = liste.GroupBy(j => j.Month).ToList();

        foreach (var g in list)
        {
            Console.WriteLine(g.Key.ToString("D2") + " - " + g.Count());
            retL.Add(g.Key, g.Count());
        }


        var thisMonth = DateTime.Now.Month;

        var finalList = retL.OrderBy(j => (thisMonth - (j.Key > thisMonth ? j.Key - 12 : j.Key))).ToList();

        foreach (var kvp in finalList)
        {
            string strMonthName = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(kvp.Key);

            ret.Add(kvp.Key.ToString().PadRight(3) + strMonthName.PadRight(8) + kvp.Value);
        }

        return ret;
    }
}
于 2016-04-14T14:09:36.463 に答える