How to find the day of the week on any given date in Kotlin

1 Answer

0 votes
object Main {

    // Zeller's Congruence implementation
    // Returns the day of the week for a given date.
    fun dayOfWeek(d: Int, mInput: Int, yInput: Int): String {

        // Zeller's output mapping:
        // 0 = Saturday, 1 = Sunday, 2 = Monday, ... 6 = Friday
        val names = arrayOf(
            "Saturday", "Sunday", "Monday", "Tuesday",
            "Wednesday", "Thursday", "Friday"
        )

        var m = mInput
        var y = yInput

        // In Zeller's formula, January and February are counted
        // as months 13 and 14 of the previous year.
        if (m < 3) {
            m += 12   // Convert Jan → 13, Feb → 14
            y -= 1    // Move to previous year
        }

        val K = y % 100   // Year of the century (last two digits)
        val J = y / 100   // Zero-based century (e.g., 2024 → 20)

        // Zeller's formula (clearer step-by-step version):

        val term1 = d                     // day of month
        val term2 = (13 * (m + 1)) / 5    // month adjustment
        val term3 = K                     // year of century
        val term4 = K / 4                 // leap years in century
        val term5 = J / 4                 // leap centuries
        val term6 = 5 * J                 // century correction

        // Combine all terms and take modulo 7
        val h = (term1 + term2 + term3 + term4 + term5 + term6) % 7

        // Return the corresponding weekday name
        return names[h]
    }

    @JvmStatic
    fun main(args: Array<String>) {
        val d = 30
        val m = 5
        val y = 2024

        println(dayOfWeek(d, m, y))
    }
}


/*
run:

Thursday

*/

 



answered 6 hours ago by avibootz
...