How to print the calendar for a specific year in VB.NET

1 Answer

0 votes
Imports System
Imports System.Globalization

Module CalendarPrinter

    Sub PrintYear(year As Integer)
        For month = 1 To 12
            PrintMonth(year, month)
            Console.WriteLine()
        Next
    End Sub

    Private Sub PrintMonth(year As Integer, month As Integer)
        Dim firstDay = New DateTime(year, month, 1)
        Dim monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month)

        Console.WriteLine()
        Console.WriteLine($"{monthName} {year}".PadLeft(20))
        Console.WriteLine("Su Mo Tu We Th Fr Sa")

        ' Sunday = 0, Monday = 1, ... in .NET DayOfWeek enum
        Dim indent = CInt(firstDay.DayOfWeek)

        For i = 1 To indent
            Console.Write("   ")
        Next

        Dim daysInMonth = DateTime.DaysInMonth(year, month)

        For day = 1 To daysInMonth
            Console.Write($"{day,2} ")

            If (indent + day) Mod 7 = 0 Then
                Console.WriteLine()
            End If
        Next

        Console.WriteLine()
    End Sub

    Sub Main()
        PrintYear(2026)
    End Sub

End Module


' run:
'
'         January 2026
' Su Mo Tu We Th Fr Sa
'              1  2  3 
'  4  5  6  7  8  9 10 
' 11 12 13 14 15 16 17 
' 18 19 20 21 22 23 24 
' 25 26 27 28 29 30 31 
' 
' 
' 
'        February 2026
' Su Mo Tu We Th Fr Sa
'  1  2  3  4  5  6  7 
'  8  9 10 11 12 13 14 
' 15 16 17 18 19 20 21 
' 22 23 24 25 26 27 28 
' 
' 
' 
'           March 2026
' Su Mo Tu We Th Fr Sa
'  1  2  3  4  5  6  7 
'  8  9 10 11 12 13 14 
' 15 16 17 18 19 20 21 
' 22 23 24 25 26 27 28 
' 29 30 31 
' 
' 
'           April 2026
' Su Mo Tu We Th Fr Sa
'           1  2  3  4 
'  5  6  7  8  9 10 11 
' 12 13 14 15 16 17 18 
' 19 20 21 22 23 24 25 
' 26 27 28 29 30 
' 
' 
'             May 2026
' Su Mo Tu We Th Fr Sa
'                 1  2 
'  3  4  5  6  7  8  9 
' 10 11 12 13 14 15 16 
' 17 18 19 20 21 22 23 
' 24 25 26 27 28 29 30 
' 31 
' 
' 
'            June 2026
' Su Mo Tu We Th Fr Sa
'     1  2  3  4  5  6 
'  7  8  9 10 11 12 13 
' 14 15 16 17 18 19 20 
' 21 22 23 24 25 26 27 
' 28 29 30 
' 
' 
'            July 2026
' Su Mo Tu We Th Fr Sa
'           1  2  3  4 
'  5  6  7  8  9 10 11 
' 12 13 14 15 16 17 18 
' 19 20 21 22 23 24 25 
' 26 27 28 29 30 31 
' 
' 
'          August 2026
' Su Mo Tu We Th Fr Sa
'                    1 
'  2  3  4  5  6  7  8 
'  9 10 11 12 13 14 15 
' 16 17 18 19 20 21 22 
' 23 24 25 26 27 28 29 
' 30 31 
' 
' 
'       September 2026
' Su Mo Tu We Th Fr Sa
'        1  2  3  4  5 
'  6  7  8  9 10 11 12 
' 13 14 15 16 17 18 19 
' 20 21 22 23 24 25 26 
' 27 28 29 30 
' 
' 
'         October 2026
' Su Mo Tu We Th Fr Sa
'              1  2  3 
'  4  5  6  7  8  9 10 
' 11 12 13 14 15 16 17 
' 18 19 20 21 22 23 24 
' 25 26 27 28 29 30 31 
' 
' 
' 
'        November 2026
' Su Mo Tu We Th Fr Sa
'  1  2  3  4  5  6  7 
'  8  9 10 11 12 13 14 
' 15 16 17 18 19 20 21 
' 22 23 24 25 26 27 28 
' 29 30 
' 
' 
'        December 2026
' Su Mo Tu We Th Fr Sa
'        1  2  3  4  5 
'  6  7  8  9 10 11 12 
' 13 14 15 16 17 18 19 
' 20 21 22 23 24 25 26 
' 27 28 29 30 31 
' 

 



answered Jan 17 by avibootz
...