如何在对象列表中每180天生成一个唯一编号

时间:2019-06-12 09:50:45

标签: c# datetime

因此,我有一个带有intDateTime的对象,必须将它们插入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, 等。

2 个答案:

答案 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。其余的是每个日期的唯一数字。