[英]Get list of dates for first week of current month in C#
我有以下代码,我正在处理当月第一周的日期列表。
public static List<DateTime> GetDates(int year, int month)
{
return Enumerable.Range(1, DateTime.DaysInMonth(year, month))
.Select(day => new DateTime(year, month, day))
.ToList();
}
但问题是我得到了当月的所有日期。
我想要实现的目标如下:
Day: SUN, MON, TUE, WED, THU, FRI, SAT
Date 1, 2, 3, 5, 6..
如何在 C# 中实现这一点?
使用这个:
DateTime today = DateTime.Today;
int currentDayOfWeek = (int) today.DayOfWeek;
DateTime sunday = today.AddDays(-currentDayOfWeek);
DateTime monday = sunday.AddDays(1);
// If we started on Sunday, we should actually have gone *back*
// 6 days instead of forward 1...
if (currentDayOfWeek == 0)
{
monday = monday.AddDays(-7);
}
var dates = Enumerable.Range(0, 6).Select(days => monday.AddDays(days)).ToList();
foreach (var date in dates) {
Console.WriteLine(date);
}
我设法得到了本周的。 但我怎样才能得到这一天呢?
output 是:
04.05.2020 00:00:00
05.05.2020 00:00:00
06.05.2020 00:00:00
07.05.2020 00:00:00
08.05.2020 00:00:00
09.05.2020 00:00:00
我希望我的输出是:
周一 - 04.05.2020 周二 - 05.05.2020
您可以使用Enumerable.Take
获取返回列表的第一周(对应于前 7 项)。
Enumerable.Range(1, DateTime.DaysInMonth(2020, 5))
.Select(day => new DateTime(2020, 5, day))
.Take(7)
.ToList();
由于您已声明第一周实际上应该从星期一开始,您可以使用Enumerable.SkipWhile
修改查询以跳过几天,直到找到第一个正确日期。
Enumerable.Range(1, DateTime.DaysInMonth(2020, 5))
.Select(day => new DateTime(2020, 5, day))
.SkipWhile(z => z.DayOfWeek != DayOfWeek.Monday)
.Take(7)
.ToList();
关于您的评论:
使用ddd
格式化程序,您可以获得日期的短名称。 string shortName = DateTime.Now.ToString("ddd");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.