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

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:28:38
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东海县| 万年县| 治县。| 惠东县| 勐海县| 江安县| 临朐县| 宜兴市| 府谷县| 洪江市| 嘉义县| 浪卡子县| 罗平县| 临武县| 罗甸县| 江油市| 新田县| 五大连池市| 句容市| 西青区| 南通市| 循化| 孟津县| 荣成市| 合水县| 通化市| 英山县| 拉萨市| 屏边| 朝阳区| 宣威市| 博白县| 余姚市| 山丹县| 稻城县| 吉林省| 东平县| 钟山县| 马龙县| 贵南县| 神池县|