【发布时间】:2011-02-24 12:26:29
【问题描述】:
我正在使用以下方法从 ID 列表中获取随机值。
private int GetRandomDateBasedSectorId(IEnumerable<int> sectorIds)
{
var randomSortTable = new Dictionary<int, int>();
foreach (int id in sectorIds)
randomSortTable[new Random(DateTime.Now.DayOfYear).Next()] = id;
return randomSortTable.OrderBy(KVP => KVP.Key).Select(KVP => KVP.Value).FirstOrDefault();
}
我使用DateTime.Now.DayOfYear 作为种子的原因是因为我想在一天内每次执行该方法时都选择相同的扇区ID,而第二天我会随机选择一个不同的扇区ID。
这在一定程度上可行,但并不完美。例如,昨天早上和前一天晚上它一直在选择单个扇区 ID,然后在昨天的某个时间点开始选择不同的扇区 ID,而今天它仍在使用昨天下午使用的相同扇区 ID。
我认为DateTime.Now.DayOfYear 会在格林威治标准时间午夜(我当前的时区)发生变化,但似乎并非如此。
如果DateTime.Now.DayOfYear 的行为与我预期的不同,有人可以告诉我吗?如果是这样,我有没有办法修改它,以便我可以确保它会在每天午夜从列表中选择一个新的扇区 ID?
【问题讨论】:
-
您确定机器上设置的时间正确吗?也许它在午夜(操作系统时间)发生了变化,这是几个小时后开始的......
-
是的,我的机器和我部署到的服务器上的日期和时间都是正确的。
-
DateTime.Now.DayOfYear在午夜发生变化。所以问题不存在。问题可能出在系统的 DateTime 中。检查它是否正确。