任何人都可以帮助我。我需要C#logic用于提前显示和序列顺序六个日期列表在星期一。提前日期清单应在下午12点后更改。例如,在3月28日星期一,日期将显示在同一天(3月28日)至下午12点。下午12点01分后,第一个日期从2016年4月11日开始。同样的序列(附加屏幕)。它永远不会显示4月4日,4月18日等。(序列顺序)..
这是我努力的C#代码,它只显示单个日期列表。
public static void Main(string[] args)
{
DateTime time = new DateTime(2016, 3, 25);
var breaks = DateTime.Today.AddHours(12D);
if (breaks>=DateTime.Now)
{
}
else if (time<DateTime.Now)
{
}
DateTime anotherTime = DateTime.Now;
var allTimes = new HashSet<DateTime>();
for (int i = 0; i < 6; i++)
{
anotherTime = time.AddDays(14);
time = anotherTime;
Console.WriteLine(anotherTime.ToLongDateString());
allTimes.Add(time);
}
}
}
这是我最后提前六个日期列表
答案 0 :(得分:1)
我不确定我是否理解你到底想要什么。但是我的存储库中有类似的功能。
public static DateTime GetNextDayOfWeek(DateTime _date, DayOfWeek _dayOfWeek)
{
DateTime Result;
int diff = _date.DayOfWeek - _dayOfWeek;
if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200)
return _date;
if (diff < 0)
{
diff += 7;
}
Result = _date.AddDays(-1 * diff).Date;
if (Result <= _date)
Result = Result.AddDays(7);
return Result;
}
我根据您的需要添加了这部分
if (diff == 0 && _date.Hour * 100 + _date.Minute <= 1200) return _date;
此功能采用日期和所需的星期几,并返回所需的星期几的最近的下一个日期。 因为我知道你想要6包这些,你可以把它放在这样的循环中:
DateTime next;
next=DateTime.Now;
foreach(DayOfWeek dow in Enum.GetValues(typeof(DayOfWeek)))
{
for(var n=0;n<6;n++)
{
next=GetNextDayOfWeek(next, dow);
//do something with your date
}
}
您可以添加另一个参数,指出您前进的天数。目前它固定为7.在你的情况下你需要14。
答案 1 :(得分:1)
试试这个
static void Main(string[] args)
{
DateTime today = DateTime.Now;
if ((today.DayOfWeek == DayOfWeek.Monday) && (today > new DateTime(today.Year, today.Month, today.Day, 12, 0, 0)))
{
today.AddDays(1);
}
int offsetToMonday = 7 - (((int)today.DayOfWeek - 1) % 7);
DateTime nextMonday = today.AddDays(offsetToMonday);
DateTime startDate = (nextMonday.DayOfYear / 7 % 2) == 0 ? nextMonday : nextMonday.AddDays(7);
DateTime endDate = startDate.AddDays(83);
List<DateTime> dates = new List<DateTime>();
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
dates.Add(date);
}
var groupedDays = dates.AsEnumerable()
.GroupBy(x => x.Subtract(startDate).Days % 14)
.OrderBy(x => x.Key)
.Where(x => x.Key == 0);
foreach (var group in groupedDays)
{
foreach (DateTime day in group)
{
Console.WriteLine(day.ToString("dddd, dd MMMM yyyy"));
}
Console.WriteLine();
}
Console.ReadLine();
}