Question: I implemented the below RandomDate, but I always keep getting values closed to "From" date, i probably miss something here....

```
public static DateTime GetRandomDate(DateTime from, DateTime to)
    {
        var range = new TimeSpan(to.Ticks - from.Ticks);

        var rnd = new Random();

        var randTimeSpan = new TimeSpan((long)(range.TotalSeconds - rnd.Next(0, (int)range.TotalSeconds))); 

        return from + randTimeSpan;
    }

```

Answer: 
You could change to:

```
static readonly Random rnd = new Random();
public static DateTime GetRandomDate(DateTime from, DateTime to)
{
    var range = to - from;

    var randTimeSpan = new TimeSpan((long)(rnd.NextDouble() * range.Ticks)); 

    return from + randTimeSpan;
}

```

Explanation: I used `NextDouble()` because it gives a number between `0.0` and `1.0`. Your return value won't be a whole number of seconds in my solution. And I moved `rnd` out to a field on the class/struct. Because it's best to reuse one `Random` instance, and not create a new one every time one needs just one additional random number.
My idea is we just need some random number of ticks added to start datetime to get a random date in between start and end. So my solution does not create any `TimeSpan` objects.

```
private static readonly Random random = new Random ();
private static readonly object syncLock = new object ();

public static DateTime RandomDate(DateTime from, DateTime to)
{
    lock ( syncLock )
    {
         return from.AddTicks ((long) ( random.NextDouble () * ( to.Ticks - from.Ticks ) ));
    }
 }

```