国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中實現隨機時間的獲取

2019-11-18 17:01:09
字體:
來源:轉載
供稿:網友

    原理其實非常簡單,取出兩個時間差的秒數,再在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);
        }
    }
}
測試代碼:

using System;
using NUnit.Framework;

namespace Yyw
{
    [TestFixture]
    public class DateTimeHelperFixture
    {
        /**//// <summary>
        /// 邊界測試
        /// </summary>
        [Test]
        public void TestGetRandomTime()
        {
            DateTime minTime = DateTime.MinValue;
            DateTime maxTime = DateTime.MaxValue;
            Random random = new Random();

            for (int i = 0; i < 10000; i++)
            {
                DateTime randomTime = DateTimeHelper.GetRandomTime(maxTime, minTime, random);
                CheckResult(minTime, maxTime, randomTime);
            }

            for (int 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)
        {
            System.TimeSpan ts1 = new System.TimeSpan(randomTime.Ticks - minTime.Ticks);
            System.TimeSpan ts2 = new System.TimeSpan(randomTime.Ticks - maxTime.Ticks);
            Assert.IsTrue(ts1.Seconds >= 0 && ts2.Seconds <= 0);
        }
    }
}
http://www.survivalescaperooms.com/yyw84/archive/2006/09/07/497800.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武宁县| 行唐县| 淮南市| 兴仁县| 时尚| 迁西县| 双城市| 海淀区| 宁陵县| 怀化市| 武川县| 永清县| 南靖县| 吉安市| 镇宁| 海伦市| 合山市| 阜康市| 迁西县| 嘉峪关市| 灌云县| 含山县| 元阳县| 江门市| 磴口县| 井陉县| 泗阳县| 彰化县| 怀来县| 集安市| 正蓝旗| 九龙坡区| 桑植县| 灌云县| 沙坪坝区| 福海县| 炎陵县| 清徐县| 台湾省| 财经| 祁门县|