代码如下:
using ;
Yyw
{
public DateTimeHelper
{
/**//// <summary>
/// 获取随机时间
/// <remarks>
/// 由于Random 以当前系统时间做为种值,所以当快速运行多次该思路方法所得到结果可能相同,
/// 这时,你应该在外部化 Random 例子并 GetRandomTime(DateTime time1, DateTime time2, Random random)
/// </remarks>
/// </summary>
/// <param name="time1"></param>
/// <param name="time2"></param>
/// <s></s>
public DateTime GetRandomTime(DateTime time1, DateTime time2)
{
Random random = Random;
GetRandomTime(time1, time2, random);
}
/**//// <summary>
/// 获取随机时间
/// </summary>
/// <param name="time1"></param>
/// <param name="time2"></param>
/// <param name="random"></param>
/// <s></s>
public DateTime GetRandomTime(DateTime time1, DateTime time2, Random random)
{
DateTime minTime = DateTime;
DateTime maxTime = DateTime;
.TimeSpan ts = .TimeSpan(time1.Ticks - time2.Ticks);
// 获取两个时间相隔秒数
double dTotalSecontds = ts.TotalSeconds;
iTotalSecontds = 0;
(dTotalSecontds > .Int32.MaxValue)
{
iTotalSecontds = .Int32.MaxValue;
}
(dTotalSecontds < .Int32.MinValue)
{
iTotalSecontds = .Int32.MinValue;
}
{
iTotalSecontds = ()dTotalSecontds;
}
(iTotalSecontds > 0)
{
minTime = time2;
maxTime = time1;
}
(iTotalSecontds < 0)
{
minTime = time1;
maxTime = time2;
}
{
time1;
}
maxValue = iTotalSecontds;
(iTotalSecontds <= .Int32.MinValue)
maxValue = .Int32.MinValue + 1;
i = random.Next(.Math.Abs(maxValue));
minTime.AddSeconds(i);
}
}
}
测试代码:using ;
using NUnit.Framework;
Yyw
{
[TestFixture]
public DateTimeHelperFixture
{
/**//// <summary>
/// 边界测试
/// </summary>
[Test]
public void TestGetRandomTime
{
DateTime minTime = DateTime.MinValue;
DateTime maxTime = DateTime.MaxValue;
Random random = Random;
for ( i = 0; i < 10000; i)
{
DateTime randomTime = DateTimeHelper.GetRandomTime(maxTime, minTime, random);
CheckResult(minTime, maxTime, randomTime);
}
for ( i = 0; i < 10000; i)
{
DateTime randomTime = DateTimeHelper.GetRandomTime(minTime, maxTime, random);
CheckResult(minTime, maxTime, randomTime);
}
}
private void CheckResult(DateTime minTime, DateTime maxTime, DateTime randomTime)
{
.TimeSpan ts1 = .TimeSpan(randomTime.Ticks - minTime.Ticks);
.TimeSpan ts2 = .TimeSpan(randomTime.Ticks - maxTime.Ticks);
Assert.IsTrue(ts1.Seconds >= 0 && ts2.Seconds <= 0);
}
}
}
http://www.cnblogs.com/yyw84/archive/2006/09/07/497800.html
最新评论