我必須列出具有DateTime屬性的對象,並且我需要對此列表進行排序,以便與列表中最接近的日期對象爲DateTime.Now
。排序最接近當前日期的日期列表
我曾嘗試以下:
nodes.Sort((x, y) => DateTime.Compare(
DateTime.Now,
DateTime.Parse(x.GetProperty("date").Value)));
但這不返回正確的結果。
有沒有人知道一個很好的方法來做到這一點? :-)
我必須列出具有DateTime屬性的對象,並且我需要對此列表進行排序,以便與列表中最接近的日期對象爲DateTime.Now
。排序最接近當前日期的日期列表
我曾嘗試以下:
nodes.Sort((x, y) => DateTime.Compare(
DateTime.Now,
DateTime.Parse(x.GetProperty("date").Value)));
但這不返回正確的結果。
有沒有人知道一個很好的方法來做到這一點? :-)
您可以通過節點時間和當前時間之間的絕對差值對它們進行排序。你可以得到一個TimeSpan
的絕對時間與Duration方法:
DateTime now = DateTime.Now;
var ordered = nodes.OrderBy(n => (now - DateTime.Parse(n.GetProperty("date").Value)).Duration())
This!這正是我所需要的! :-)非常感謝,李。 – bomortensen
nodes.OrderByDescending(x => DateTime.Parse(x.GetProperty("date").Value));
不知道這是否會正是你後,但如果你正在試圖做的是順序列表中最近的日期,這將做的工作是什麼。
from node in nodes
let diff = Math.Abs(DateTime.Now.Subtract(node.DateTime).TotalSeconds)
order by diff
select date
如何回合
nodes.Sort((x,y) => Math.Abs((DateTime.Now, DateTime.Parse(x.GetProperty ("date").Value).Ticks))
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;
}
}
你能不只是'OrderByDescending'的日期? –
[第一個谷歌結果爲「排序日期時間c#」](http://www.dotnetperls.com/sort-datetime) - hmm ... – Sayse
你的意思是說你想按照abs(日期 - 現在)排序, ? –