当前位置:主页   - 电脑 - 程序设计 - C#
C#中实现随机时间的获取
来源:网络   作者:   更新时间:2012-02-05
收藏此页】    【字号    】    【打印】    【关闭

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

  代码如下:

using System;
namespace Yyw
{
  public class DateTimeHelper
  {
    /**//// <summary>
    /// 获取随机时间
    /// <remarks>
    /// 由于Random 以当前系统时间做为种值,所以当快速运行多次该方法所得到的结果可能相同,
    /// 这时,你应该在外部初始化 Random 实例并调用 GetRandomTime(DateTime time1, DateTime time2, Random random)
    /// </remarks>
    /// </summary>
    /// <param name="time1"></param>
    /// <param name="time2"></param>
    /// <returns></returns>
    public static DateTime GetRandomTime(DateTime time1, DateTime time2)
    {
      Random random = new Random();
      return GetRandomTime(time1, time2, random);
    }
    /**//// <summary>
    /// 获取随机时间
    /// </summary>
    /// <param name="time1"></param>
    /// <param name="time2"></param>
    /// <param name="random"></param>
    /// <returns></returns>
    public static DateTime GetRandomTime(DateTime time1, DateTime time2, Random random)
    {
      DateTime minTime = new DateTime();
      DateTime maxTime = new DateTime();
      System.TimeSpan ts = new System.TimeSpan(time1.Ticks - time2.Ticks);
      // 获取两个时间相隔的秒数
      double dTotalSecontds = ts.TotalSeconds;
      int iTotalSecontds = 0;
      if (dTotalSecontds > System.Int32.MaxValue)
      {
        iTotalSecontds = System.Int32.MaxValue;
      }
      else if (dTotalSecontds < System.Int32.MinValue)
      {
        iTotalSecontds = System.Int32.MinValue;
      }
      else
      {
        iTotalSecontds = (int)dTotalSecontds;
      }
      if (iTotalSecontds > 0)
      {
        minTime = time2;
        maxTime = time1;
      }
      else if (iTotalSecontds < 0)
      {
        minTime = time1;
        maxTime = time2;
      }
      else
      {
        return time1;
      }
      int maxValue = iTotalSecontds;
      if (iTotalSecontds <= System.Int32.MinValue)
        maxValue = System.Int32.MinValue + 1;
      int i = random.Next(System.Math.Abs(maxValue));
      return minTime.AddSeconds(i);
    }
  }
}
测试代码:

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明