Developer Tools for Random Data Generation // v2.6.1
root@generate-random:~/dates/csharp$ _

Generate Random Dates in C#

Complete code tutorial with examples and best practices

[ Code Example - Quick Summary ]

Language: C#

What: Generate random dates in C# using DateTime and Bogus library. Covers date ranges, formatting, timezone handling with DateTimeOffset, and integration with xUnit/NUnit.

Try it: Use our interactive Dates generator or integrate this code into your C# application.

Generate random dates in C# using DateTime and Bogus library. Covers date ranges, formatting, timezone handling with DateTimeOffset, and integration with xUnit/NUnit. Looking for other languages? Check our code examples in PHP , JavaScript , Python , Java , C++ , Ruby and Go or use our interactive web generator.

C# Code Example

using System;
using System.Linq;

public class RandomDateGenerator
{
    private static readonly Random random = new Random();

    // Generate random date between two dates
    public static DateTime RandomDate(DateTime startDate, DateTime endDate)
    {
        int range = (endDate - startDate).Days;
        return startDate.AddDays(random.Next(range + 1));
    }

    // Generate random past date (within last N days)
    public static DateTime RandomPastDate(int daysAgo = 365)
    {
        return DateTime.Now.AddDays(-random.Next(daysAgo + 1));
    }

    // Generate random future date (within next N days)
    public static DateTime RandomFutureDate(int daysAhead = 365)
    {
        return DateTime.Now.AddDays(random.Next(daysAhead + 1));
    }

    // Generate random birthday (18-80 years ago)
    public static DateTime RandomBirthday()
    {
        var today = DateTime.Now;
        var minAge = 18;
        var maxAge = 80;
        var randomAge = random.Next(minAge, maxAge + 1);
        var birthYear = today.Year - randomAge;
        var startOfYear = new DateTime(birthYear, 1, 1);
        var endOfYear = new DateTime(birthYear, 12, 31);
        return RandomDate(startOfYear, endOfYear);
    }

    // Generate random DateTime with time component
    public static DateTime RandomDateTime(DateTime startDate, DateTime endDate)
    {
        var date = RandomDate(startDate, endDate);
        var hour = random.Next(24);
        var minute = random.Next(60);
        var second = random.Next(60);
        return new DateTime(date.Year, date.Month, date.Day, hour, minute, second);
    }

    // Generate random DateTimeOffset (timezone-aware)
    public static DateTimeOffset RandomDateTimeOffset(DateTime startDate, DateTime endDate)
    {
        var dateTime = RandomDateTime(startDate, endDate);
        return new DateTimeOffset(dateTime, TimeSpan.Zero);
    }

    // Generate multiple random dates
    public static string[] GenerateRandomDates(int count, string startDate, string endDate)
    {
        var start = DateTime.Parse(startDate);
        var end = DateTime.Parse(endDate);

        return Enumerable.Range(0, count)
            .Select(_ => RandomDate(start, end).ToString("yyyy-MM-dd"))
            .ToArray();
    }

    // Using Bogus library (Install-Package Bogus)
    // using Bogus;
    // var faker = new Faker();
    // DateTime randomDate = faker.Date.Between(startDate, endDate);
    // DateTime pastDate = faker.Date.Past(1); // 1 year ago
    // DateTime futureDate = faker.Date.Future(1); // 1 year ahead
    // DateTime birthday = faker.Date.Past(80, DateTime.Now.AddYears(-18));
    // DateTimeOffset recentDate = faker.Date.RecentOffset(30); // Last 30 days

    public static void Main()
    {
        var start = new DateTime(2020, 1, 1);
        var end = new DateTime(2025, 12, 31);

        Console.WriteLine($"Random date: {RandomDate(start, end):yyyy-MM-dd}");
        Console.WriteLine($"Past date: {RandomPastDate(30):yyyy-MM-dd}");
        Console.WriteLine($"Future date: {RandomFutureDate(90):yyyy-MM-dd}");
        Console.WriteLine($"Random birthday: {RandomBirthday():yyyy-MM-dd}");
        Console.WriteLine($"With time: {RandomDateTime(start, end):yyyy-MM-dd HH:mm:ss}");
        Console.WriteLine($"Batch: {string.Join(", ", GenerateRandomDates(5, "2020-01-01", "2025-12-31"))}");
    }
}

[EXPLANATION]

C#'s DateTime struct represents dates and times. TimeSpan represents time intervals for date arithmetic. AddDays(), AddMonths(), AddYears() perform date calculations. DateTimeOffset includes timezone information. String interpolation with format specifiers like {date:yyyy-MM-dd} simplifies formatting. Bogus library provides Date.Between(), Past(), Future(), and Recent() methods for realistic test data generation in xUnit, NUnit, and MSTest.

Expected Output

Random date: 2023-07-15
Past date: 2024-11-17
Future date: 2025-03-15
Random birthday: 1985-04-23
With time: 2024-07-15 14:32:47
Batch: 2022-03-12, 2024-08-05, 2021-11-28, 2023-05-19, 2025-01-07

Common Use Cases

  • Generate test data for Entity Framework models with date properties
  • Create sample datasets for ASP.NET Core API testing
  • Populate date fields in xUnit and NUnit test fixtures
  • Test date validation and business rules in .NET applications
  • Generate time-series data for reporting and analytics

Important Notes

  • DateTime.Now uses local time; DateTime.UtcNow returns UTC
  • DateTimeOffset is recommended for timezone-aware scenarios
  • Bogus supports fluent syntax: faker.Date.Past(yearsToGoBack: 5)
  • For thread-safe random generation, create separate Random instances
  • DateTime.Parse() is culture-sensitive; use ParseExact() for specific formats

Try Our Interactive Generator

Don't want to write code? Use our free web-based Dates generator with instant results.

TRY DATES GENERATOR →