获取随机数:C#中实现随机时间的获取

  原理其实非常简单取出两个时间差秒数再在0到该秒数的间随机获取个整数将其做为秒添加到较小时间上可以说实现上并没什么技术难点可以在数据类型边界条件上却需要格外注意比如将大于 .Int32.MaxValue 或小于 .Int32.MinValue 值转成 如果直接在变量前加上类型名转换(()d)不会有有异常产生但得到值却是 .Int32.MinValue还有就是对于Math.Abs 思路方法当参数 value 等于 MinValue 将会引发 .OverflowException 异常

  代码如下:

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



Tags:  获取当前时间 获取系统时间 获取随机数

延伸阅读

最新评论

发表评论