using System.Collections.Generic;
public static void Main()
public static DateTime ConvertToUserTime(DateTime dt) {
var myConvertedDateTime = TimeZoneInfo.ConvertTimeFromUtc(dt,TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time"));
myConvertedDateTime = DateTime.SpecifyKind(myConvertedDateTime, DateTimeKind.Unspecified);
return myConvertedDateTime;
public static void FindCalendar(int year, int month) {
var dayInLastMonth = new List<DateResultModel>();
var dayInThisMonth = new List<DateResultModel>();
var dayInNextMonth = new List<DateResultModel>();
var date = new DateTime(year, month, 1);
var userTime = ConvertToUserTime(date);
Console.WriteLine(userTime);
var firstDayInThisMonth = new DateTime(userTime.Year, userTime.Month, 1).DayOfWeek;
var lastMonth = DateTime.UtcNow;
prevNumOfDay = DateTime.DaysInMonth(year - 1, 12);
lastMonth = new DateTime(year - 1, 12, 1);
prevNumOfDay = DateTime.DaysInMonth(userTime.Year, userTime.Month-1);
lastMonth = new DateTime(userTime.Year, userTime.Month-1, 1);
for (var i = prevNumOfDay - ((int)firstDayInThisMonth - 1); i <= prevNumOfDay ; i++) {
var dayInLastMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(lastMonth.Year, lastMonth.Month, i).DayOfWeek,
Date = new DateTime(lastMonth.Year, lastMonth.Month, i)
dayInLastMonth.Add(dayInLastMonthItem);
Console.WriteLine("Day In Last Month");
dayInLastMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
var totalThisMonthDay = DateTime.DaysInMonth(userTime.Year, userTime.Month);
for(var i = 0 ; i < totalThisMonthDay ; i++) {
var dayInThisMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(userTime.Year, userTime.Month, i + 1).DayOfWeek,
Date = new DateTime(userTime.Year, userTime.Month, i + 1)
dayInThisMonth.Add(dayInThisMonthItem);
Console.WriteLine("Day In This Month");
dayInThisMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
Console.WriteLine("Day In Next Month");
var lastDayInThisMonth = (int) new DateTime(userTime.Year, userTime.Month, totalThisMonthDay).DayOfWeek;
userTime = new DateTime(year + 1, 1, 1);
for(var i = 0 ; i < (6 - lastDayInThisMonth) ; i++) {
var dayInNextMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(userTime.Year, userTime.Month, i+1).DayOfWeek,
Date = new DateTime(userTime.Year, userTime.Month, i+1)
dayInNextMonth.Add(dayInNextMonthItem);
dayInNextMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
var totalDays = dayInLastMonth.Count + dayInThisMonth.Count + dayInNextMonth.Count;
for(var i = (7-lastDayInThisMonth); i < ((7-lastDayInThisMonth)+7); i++) {
var dayInNextMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(userTime.Year, userTime.Month, i).DayOfWeek,
Date = new DateTime(userTime.Year, userTime.Month, i)
dayInNextMonth.Add(dayInNextMonthItem);
dayInNextMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
for(var i = 0 ; i < (6 - lastDayInThisMonth) ; i++) {
var dayInNextMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(userTime.Year, userTime.Month+1, i+1).DayOfWeek,
Date = new DateTime(userTime.Year, userTime.Month+1, i+1)
dayInNextMonth.Add(dayInNextMonthItem);
dayInNextMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
var totalDays = dayInLastMonth.Count + dayInThisMonth.Count + dayInNextMonth.Count;
for(var i = (7-lastDayInThisMonth); i < ((7-lastDayInThisMonth)+7); i++) {
var dayInNextMonthItem = new DateResultModel{
DayOfWeek = (int) new DateTime(userTime.Year, userTime.Month+1, i).DayOfWeek,
Date = new DateTime(userTime.Year, userTime.Month+1, i)
dayInNextMonth.Add(dayInNextMonthItem);
dayInNextMonth.ForEach(i => Console.WriteLine("Day: {0}\t DayOfWeek:{1}\t Date:{2}\t |", i.Day, i.DayOfWeek, i.Date));
public class DateResultModel {
public int Day { get; set; }
public int DayOfWeek { get; set;}
public DateTime Date { get; set;}