Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Create your online store today with Shopify

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Disclosure: My content contains affiliate links.

43,239 questions

56,142 answers

573 users

How to compare two dates in C#

1 Answer

0 votes
using System;
using System.Globalization;

/*
    Compare two dates in C#
    -----------------------
    This program demonstrates how to compare two dates using C#'s built‑in
    DateTime structure. It uses a modular design, clear comments, and a full test suite.

    Concepts:
        - Parsing dates safely (YYYY‑MM‑DD)
        - Comparing DateTime objects
        - Handling invalid formats
        - Edge‑case testing

    Architecture notes:
        - A dedicated function handles parsing.
        - Another function performs comparison.
        - Main runs multiple predefined test cases.
        - No external dependencies; only standard library.

    Performance notes:
        - DateTime comparisons are O(1).
        - Parsing is fast and predictable.
        - Memory usage is minimal.

    Pitfalls:
        - Invalid date strings must be handled.
        - Comparing raw strings is unsafe; always convert to DateTime.
        - DateTime is timezone‑aware; here we treat dates as date‑only values.
*/

class Program
{
    /*
        Safely parse a date string in the format YYYY-MM-DD.

        Error handling:
            - Returns null if the date is invalid.
    */
    static DateTime? ParseDate(string s)
    {
        try
        {
            return DateTime.ParseExact(
                s,
                "yyyy-MM-dd",
                CultureInfo.InvariantCulture,
                DateTimeStyles.None
            );
        }
        catch
        {
            return null;
        }
    }

    /*
        Compare two DateTime objects.

        Returns:
            - "earlier"
            - "later"
            - "equal"
    */
    static string CompareDates(DateTime a, DateTime b)
    {
        if (a < b) return "earlier";
        if (a > b) return "later";
        return "equal";
    }

    /*
        Run a single test case:
            - Parse both dates
            - Handle invalid input
            - Compare if valid
    */
    static void RunTestCase(string d1, string d2)
    {
        var a = ParseDate(d1);
        var b = ParseDate(d2);

        if (a is null || b is null) {
            Console.WriteLine($"Compare '{d1}' vs '{d2}' -> invalid date format");
            return;
        }

        Console.WriteLine($"Compare '{d1}' vs '{d2}' -> {CompareDates(a.Value, b.Value)}");
    }

    /*
        Main test suite:
            - Multiple test cases
            - Includes edge cases
            - Prints results cleanly
    */
    static void Main()
    {
        Console.WriteLine("Date comparison tests:\n");

        string[,] tests =
        {
            {"2024-01-01", "2024-01-02"},   // earlier
            {"2024-01-02", "2024-01-01"},   // later
            {"2024-01-01", "2024-01-01"},   // equal
            {"1999-12-31", "2000-01-01"},   // millennium boundary
            {"2024-02-29", "2024-03-01"},   // leap year
            {"2024-02-29", "2023-02-28"},   // leap vs non-leap
            {"2024-13-01", "2024-01-01"},   // invalid month
            {"2024-00-10", "2024-01-01"},   // invalid month
            {"2024-01-32", "2024-01-01"},   // invalid day
            {"abcd-ef-gh", "2024-01-01"},   // invalid format
            {"2024-01-01", "abcd-ef-gh"}    // invalid format
        };

        for (int i = 0; i < tests.GetLength(0); i++) {
            RunTestCase(tests[i, 0], tests[i, 1]);
        }
    }
}


/*
run:

Date comparison tests:

Compare '2024-01-01' vs '2024-01-02' -> earlier
Compare '2024-01-02' vs '2024-01-01' -> later
Compare '2024-01-01' vs '2024-01-01' -> equal
Compare '1999-12-31' vs '2000-01-01' -> earlier
Compare '2024-02-29' vs '2024-03-01' -> earlier
Compare '2024-02-29' vs '2023-02-28' -> later
Compare '2024-13-01' vs '2024-01-01' -> invalid date format
Compare '2024-00-10' vs '2024-01-01' -> invalid date format
Compare '2024-01-32' vs '2024-01-01' -> invalid date format
Compare 'abcd-ef-gh' vs '2024-01-01' -> invalid date format
Compare '2024-01-01' vs 'abcd-ef-gh' -> invalid date format

*/

 



answered 1 day ago by avibootz
...