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

原理其实非常简单,取出两个时间差的秒数,再在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>
       ///www.bianceng.cn
    /// </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);
    }
  }
}

时间: 2024-09-11 09:47:05

C#中实现随机时间的获取的相关文章

解析android中系统日期时间的获取_Android

复制代码 代码如下: import    java.text.SimpleDateFormat;     SimpleDateFormat    formatter    =   new    SimpleDateFormat    ("yyyy年MM月dd日    HH:mm:ss     ");     Date    curDate    =   new    Date(System.currentTimeMillis());//获取当前时间     String    str 

获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用_MsSql

复制代码 代码如下: SELECT ABS(DATEDIFF(dd,EndDate,BeginDate)) FROM dbo.WorkingPlan 其中,WorkingPlan 为一张表, EndDate和BeginDate为WorkingPlan 表中的结束时间和开始时间 如果哪里有不正确的地方,欢迎批评指正,共同进步.

5 个关于 API 中日期和时间设计规则

比方说,你要建立你的第一个API,将它变成公共.私人.或一些混合的产品.不要感到惊讶,如果你的第一个缺陷是和日期/时间相关的,那么不要低估你可能当涉及到处理日期和时期的时候所带来的麻烦.当涉及到处理的日期和时间问题时,你可以进来看看.这里有一些技巧可以让你摆脱这种潜在的麻烦. 警告:我假设你使用公历.在国际场合,这可能是一个糟糕的假设.如果你在一个不同的日历算法中操作,这不会帮助你. 规则 #1 使用ISO-8601格式作为你的日期格式 这是没有可讨论的余地的.从W3C 到 IETF, 还有甚至

《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择

3.2游戏中的随机选择 大多数游戏都包括某种随机选择,以向结果中添加不确定性.少数几种游戏(比如<国际象棋>和<西洋跳棋>)不依赖于随机选择,能否赢得游戏完全依赖于玩家的技能.这样的游戏称为完全信息博弈(perfect information game),因为不会对玩家隐藏任何东西,所以他们能够准确地知道从一个回合到下一个回合可能发生什么.在这样的游戏中没有隐藏的信息(例如,采用面朝下的方式发牌),也没有随机选择. 大多数视频游戏都依赖于一些随机选择,它们不仅可以使玩家猜测接下来将

Java 8中日期和时间的处理方法_java

Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. java.util.Date月份从0开始,一月是0,十二月是11,变态吧!java.time.LocalDate月份和星期都改成了enum,就不可能再用错了. java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,

在mysql数据库中关于日期时间字段的处理

在mysql数据库中关于日期时间字段的处理 在开发中,日期时间字段一般有如下几种设计 假设要获取2013-08-15日到2013-08-16日之间的记录 1. 直接使用日期时间类字段 相关sql语句如下 select * from cms_news where  news_add_time between str_to_date("2013-08-15 00:00:00",'%Y-%m-%d %H:%i:%s') and str_to_date("2013-08-16 23:

从MySQL数据库表中取出随机数据的代码_php技巧

MySQL 如何从表中取出随机数据  以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND()  RAND(N)  返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  mysql> select RAND

Android中日期与时间设置控件用法实例_Android

本文实例讲述了Android中日期与时间设置控件用法.分享给大家供大家参考.具体如下: 1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码: 页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextView控件,用于显示设置后的系统时间 main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x

python中日期和时间格式化输出的方法小结_python

本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化日期时间的函数为datetime.datetime.strftime():由字符串转为日期型的函数为:datetime.datetime.strptime(),两个函数都涉及日期时间的格式化字符串,这里提供详细的代码详细演示了每一个参数的使用方法及范例. 下面是格式化日期和时间时可用的替换符号 %a 输出当前是星期几的英文简写 >>> import datetime >&