如何以特定格式获取当月的每一天



我想一次输出当月的所有日期。格式(例如八月(应为Monday - 01.08.22Wednesday - 31.08.22。我想把每一天都转移到Excel列表中。我的问题是如何以编程方式输出当前月份的各个日期。

我可以想象使用库DateTime moment = new DateTime();

public List<string> GetMonthDays(int month)
{
var year = DateTime.Now.Year;
return Enumerable.Range(1, DateTime.DaysInMonth(year, month))
.Select(day => new DateTime(year, month,day).ToString("dddd - dd.MM.yy"))
.ToList();
}

呼叫

var days = GetMonthDays(8);
foreach(var day in days)
{
Console.WriteLine(day);
}

输出

星期一-01.08.22

星期二-02.08.22

DateTime.DaysInMonth的帮助下,这应该足够简单。

首先,我们将使用起始的DateTime来获取年份和月份编号,以便为该月的第一天创建一个新的DateTime

接下来我们将得到一个月中的天数。

然后,我们将从0循环到[daysInMonth](不包括(,将该天数添加到startOfMonth日期。

最后,我们可以将每个字符串转换为所需格式的字符串。

DateTime startTime = DateTime.Now;
DateTime startOfMonth = new DateTime(startTime.Year, startTime.Month, 1);
int daysInMonth = DateTime.DaysInMonth(startTime.Year, startTime.Month);
for (int i = 0; i < daysInMonth; ++i)
{
DateTime currentDate = startOfMonth.AddDays(i);
Console.WriteLine(currentDate.ToString("dddd - dd.MM.yy", CultureInfo.InvariantCulture));
}

在线试用

今日产量:

Monday - 01.08.22
Tuesday - 02.08.22
Wednesday - 03.08.22
Thursday - 04.08.22
Friday - 05.08.22
Saturday - 06.08.22
Sunday - 07.08.22
Monday - 08.08.22
Tuesday - 09.08.22
Wednesday - 10.08.22
Thursday - 11.08.22
Friday - 12.08.22
Saturday - 13.08.22
Sunday - 14.08.22
Monday - 15.08.22
Tuesday - 16.08.22
Wednesday - 17.08.22
Thursday - 18.08.22
Friday - 19.08.22
Saturday - 20.08.22
Sunday - 21.08.22
Monday - 22.08.22
Tuesday - 23.08.22
Wednesday - 24.08.22
Thursday - 25.08.22
Friday - 26.08.22
Saturday - 27.08.22
Sunday - 28.08.22
Monday - 29.08.22
Tuesday - 30.08.22
Wednesday - 31.08.22

我不确定这是否是问题的根本原因,但为了计算一个月的结束日期(换句话说,天数是多少(,您可以执行以下操作(伪代码(:

DateTime nextMonth = new DateTime(1, month + 1, 2022) - 1;

(只需取下个月的第一天,减去1(

如果你要处理的是12月,你可以做以下事情:

DateTime nextMonth = month == 12 ? 
new DateTime(1, 1, 2023) - 1 : 
new DateTime(1, month + 1, 2022) - 1;

最新更新