网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.c-sharp开发应避免的几个小滥用.
.c#中获取存储过程方法.
.C#可逆加密算法收集.
.C#用代码打开软键盘.
.如何利用C#创建和调用DLL .
.C#中使用TextBox控件的两个问题.
.C#实现的根据年月日计算星期几的.
.c#中连接SqL2005数据库错误解决及.
.C#动态生成树型结构的Web程序设计.
.如何在C#中使用Win32和其他库.
.C#-委托和事件.
.C#3.0 LINQ 查询语法.
.C#编写的windows计算器-源代码.
.C#代表元及事件触发.
.C#箴言:用静态构造函数初始化静.
.C#打造自己的文件浏览器.
.远程注册表读取,与多线程池的应用.
.C#中的委托与事件[翻译] .
.在C#中使用可空类型.
.浅析.NET开发中代理模式的使用.

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

发表日期:2006-9-8


    原理其实非常简单,取出两个时间差的秒数,再在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.cnblogs.com/yyw84/archive/2006/09/07/497800.html

上一篇:C#箴言:用静态构造函数初始化静态成员 人气:5985
下一篇:根据html页面模板动态生成html页面(c#类) 人气:7328
浏览全部C#的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐