因此,我有一个带有int
和DateTime
的对象,必须将它们插入list
中。
日期是已知的,但int必须为该日期的每180天唯一。
如果日期为:,则每180个数字应为
01.01.2019-1,
01.03.2019-2,
01.05.2019-3,
02.05.2019-4,
02.07.2019-1,(因为自2019年1月1日以来已通过180,因此可以再次为1)
03.07.2019-5, 等。
答案 0 :(得分:0)
给定一个IndexedDate
类,然后加上一些日期IEnumerable<DateTime> dates
,您可以遍历它们,跟踪current
的开始日期:
private static List<IndexedDate> IndexTheDates(IEnumerable<DateTime> dates)
{
List<IndexedDate> ret = new List<IndexedDate>();
if (!dates.Any())
return ret;
var current = dates.First();
int index = 1;
foreach(var date in dates)
{
ret.Add(new IndexedDate(date, index++));
if (date >= current + TimeSpan.FromDays(180))
{
current = date;
index = 1;
}
}
return ret;
}
答案 1 :(得分:0)
如果列表中的日期是唯一的,并且您不关心数字从1开始是连续的,那么可以使用此功能:
public int GetDateId(DateTime date)
{
return (int)TimeSpan.FromTicks(date.Ticks).TotalDays % 180;
}
它将给定日期转换为天数,然后将其除以180。其余的是每个日期的唯一数字。