Check Leap Year In Dart

In programming, determining whether a year is a leap year or not is a common task, especially in applications involving date and time calculations. A leap year has an extra day (February 29), making it 366 days long instead of the usual 365. Knowing how to check for leap years is important in applications like calendar systems, scheduling, and financial calculations. This tutorial will guide you through the concept of checking leap years in Dart programming.

What is a Leap Year?

A leap year occurs every four years to help synchronize the calendar year with the solar year or seasonal year. However, there are exceptions to this rule: a year is a leap year if it is divisible by 4, but if it is divisible by 100, it is not a leap year unless it is also divisible by 400. This means that while the year 2000 is a leap year, the year 1900 is not.

Syntax

Example

bool isLeapYear(int year) {
  // Check if the year is divisible by 4
  // and not divisible by 100, or it is divisible by 400
  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
  • bool isLeapYear(int year): This defines a function named isLeapYear that takes an integer year as a parameter and returns a boolean value (true or false).
  • year % 4 == 0: This checks if the year is divisible by 4.
  • year % 100 != 0: This ensures that the year is not divisible by 100 unless it meets the next condition.
  • year % 400 == 0: This checks if the year is divisible by 400, which makes it a leap year even if it is divisible by 100.
  • How It Works

  1. The function takes an integer input representing the year.
  2. It checks if the year is divisible by 4.
  3. If it is, the function checks whether it is divisible by 100. If it is not, the year is a leap year.
  4. If the year is divisible by 100, the function checks if it is also divisible by 400. If this is true, it is a leap year; otherwise, it is not.
  5. Example 1: Basic Usage

    Example
    
    void main() {
      int year = 2020; // Declare a year variable
      // Call the function and print if it's a leap year
      if (isLeapYear(year)) {
        print('$year is a leap year.'); // Print statement for leap year
      } else {
        print('$year is not a leap year.'); // Print statement for non-leap year
      }
    }
    

Output:

Output

2020 is a leap year.

Explanation: The year 2020 is divisible by 4 and not by 100, so it is correctly identified as a leap year.

Example 2: Intermediate Usage with Variations

Example

void main() {
  List<int> years = [1996, 2000, 1900, 2023]; // List of years to check
  // Loop through each year in the list
  for (int year in years) {
    // Check if the year is a leap year
    if (isLeapYear(year)) {
      print('$year is a leap year.'); // Print for leap year
    } else {
      print('$year is not a leap year.'); // Print for non-leap year
    }
  }
}

Output:

Output

1996 is a leap year.
2000 is a leap year.
1900 is not a leap year.
2023 is not a leap year.

Explanation: This example checks multiple years in a list, demonstrating how the function can be applied in a loop.

Example 3: Real-World Application

Example

void main() {
  DateTime today = DateTime.now(); // Get current date
  int currentYear = today.year; // Extract the current year
  // Print if the current year is a leap year
  if (isLeapYear(currentYear)) {
    print('$currentYear is a leap year.'); // Print statement
  } else {
    print('$currentYear is not a leap year.'); // Print statement
  }
}

Output:

Output

2023 is not a leap year.

Explanation: This example retrieves the current year using Dart's DateTime class and checks if it is a leap year, showcasing practical usage in real applications.

Example 4: Edge Cases or Special Scenarios

Example

void main() {
  int[] edgeYears = [1600, 1700, 1800, 1900, 2000, 2100]; // Edge cases
  for (int year in edgeYears) {
    if (isLeapYear(year)) {
      print('$year is a leap year.');
    } else {
      print('$year is not a leap year.');
    }
  }
}

Output:

Output

1600 is a leap year.
1700 is not a leap year.
1800 is not a leap year.
1900 is not a leap year.
2000 is a leap year.
2100 is not a leap year.

Explanation: This example checks historical years, showing how leap year logic holds true across centuries.

Example 5: Advanced Usage

Example

void main() {
  int startYear = 2000; // Starting year
  int endYear = 2020; // Ending year
  // List to collect leap years
  List<int> leapYears = [];
  // Loop through the range of years
  for (int year = startYear; year <= endYear; year++) {
    if (isLeapYear(year)) {
      leapYears.add(year); // Collect leap years
    }
  }
  print('Leap years from $startYear to $endYear: $leapYears'); // Print leap years
}

Output:

Output

Leap years from 2000 to 2020: [2000, 2004, 2008, 2012, 2016, 2020]

Explanation: This advanced example demonstrates how to collect all leap years within a specified range, which can be useful for generating calendars or planning events.

When to Use Check Leap Year in Dart

  • Scenario 1: In calendar applications where the correct number of days in February must be calculated.
  • Scenario 2: In scheduling systems that rely on accurate date calculations, such as booking systems or event planners.
  • Scenario 3: In financial applications where interest calculations may depend on the number of days in a year.
  • Key Points

Topic Description
Leap Year Definition A year is a leap year if it is divisible by 4, but not by 100 unless also divisible by 400.
Function Creation The isLeapYear function encapsulates the leap year logic for reuse.
Multiple Checks The function can be used in loops to check multiple years at once.
Real-World Usage Leap year checks are essential for applications involving dates.
Edge Cases Historical years demonstrate the importance of robust leap year calculations.
Range Collection It is possible to gather all leap years within a specific range for various applications.

This comprehensive tutorial should provide you with a solid understanding of how to check for leap years in Dart. Happy coding!

Input Required

This code uses input(). Please provide values below: