当前位置: 首页 > 编程语言 > C#

范围之间的随机日期时间 – 不统一输出分享

时间:2023-04-10 20:28:15 C#

C#学习教程:范围之间的随机日期时间-输出共享不统一我可能在这里遗漏了一些东西....publicstaticDateTimeGetRandomDate(DateTimefrom,DateTimeto){varrange=newTimeSpan(to.Ticks-from.Ticks);varrnd=newRandom();varrandTimeSpan=newTimeSpan((long)(range.TotalSeconds-rnd.Next(0,(int)range.TotalSeconds)));从+randTimeSpan返回;您可以将其更改为:staticreadonlyRandomrnd=newRandom();publicstaticDateTimeGetRandomDate(DateTimefrom,DateTimeto){varrange=to-from;varrandTimeSpan=newTimeSpan((long)(rnd.NextDouble()*range.Ticks));从+randTimeSpan返回;}解释:我使用了NextDouble()因为它给出了一个介于0.0和1.0之间的数字。在我的解决方案中,您的返回值不会是整数秒。我将rnd移动到类/结构的字段上。因为重用Random实例比每次只需要一个随机数时都创建一个新实例要好。问题是:varrandTimeSpan=newTimeSpan((long)(range.TotalSeconds-rnd.Next(0,(int)range.TotalSeconds)));正在从TICKS创建TimeSpan,而不是从SECONDS。你需要:varrandTimeSpan=TimeSpan.FromSeconds((long)(range.TotalSeconds-rnd.Next(0,(int)range.TotalSeconds)));(检查演员-它需要是传递给FromSeconds的双精度)这是因为TimeSpan的构造函数需要长而不是秒。varrandTimeSpan=newTimeSpan(range.Ticks-rnd.Next(0,range.Ticks));修复了ArgumentOutOfRangeException:publicstaticDateTimeGetRandomDateTime(DateTime?min=null,DateTime?max=null){min=min??新日期时间(1753、01、01);最大=最大??新日期时间(9999、12、31);varrange=max.Value-min.Value;varrandomUpperBound=(Int32)range.TotalSeconds;if(randomUpperBoundpair这对我有用。日期间隔28天以避免二月例外。Randomr=newRandom();DateTimerDate=newDateTime(r.Next(1900,2010),r.Next(1,12),r.Next(1,28));我的想法是,我们只需要在开始日期时间中添加一些随机数的刻度来获得开始和结束之间的随机日期。所以我的解决方案不会创建任何时间跨度对象。以上是C#学习教程:Randomdateandtimebetweenranges–不统一输出所有分享的内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---privatestaticreadonlyRandomrandom=newRandom();privatestaticreadonlyobjectsyncLock=newobject();publicstaticDateTimeRandomDate(DateTimefrom,DateTimeto){lock(syncLock){返回自。AddTicks((long)(random.NextDouble()*(to.Ticks-from.Ticks)));}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: