[AccessD] Create a random date/time

Stuart McLachlan stuart at lexacorp.com.pg
Fri Aug 28 20:21:50 CDT 2015


Rnd * Rnd is NOT a "trick to create a random date/time".

It is a trick to create "more significant digits" than the Single returned by a Rnd.

Unfortunately it has a VERY  bad side effect. Multiplying random numbers together alters the 
probablility distribution.  http://mathworld.wolfram.com/UniformProductDistribution.html

A better way would be to use Rnd twice in a different way. First to generate the Date part and 
a second time to generate the time part, then add then together.

-- 
Stuart

On 28 Aug 2015 at 15:29, Gustav Brock wrote:

> Hi all
> 
> Have you ever wondered how to create a random date/time?
> 
> Well I hadn't, but it is not that difficult. The trick is using Rnd
> twice:
> 
>     RandomDate = CDate((CLng(#12/31/9999#) - CLng(#1/1/100#)) * Rnd *
>     Rnd + CLng(#1/1/100#))
> 
> The full story is here:
> 
>     http://stackoverflow.com/a/32265346/3527297
> 
> If you want a value within a given range, you can use this simple
> function:
> 
> <code>
> Public Function DateRandom( _
>     Optional ByVal UpperDate As Date = #12/31/9999#, _
>     Optional ByVal LowerDate As Date = #1/1/100#) _
>     As Date
> 
> '   Generates a random date/time - optionally within the range of
> LowerDate and/or UpperDate. ' '   2015-08-28. Gustav Brock, Cactus
> Data ApS, CPH.
> 
>     Dim RandomDate  As Date
> 
>     RandomDate = CDate((CLng(UpperDate) - CLng(LowerDate)) * Rnd * Rnd
>     + CLng(LowerDate))
> 
>     DateRandom = RandomDate
> 
> End Function
> </code>
> 
> /gustav
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 




More information about the AccessD mailing list