简体   繁体   English

如何获取每月和每年中特定日期的日期?

[英]How to get the date of a specific day in every month and year?

Just want to get the date of Monday, Wednesday and Saturday of every month in the years. 只想获取年份中每个月的星期一,星期三和星期六的日期。 i tried to managed it this way; 我试图用这种方式来管理它;

DateTime today = DateTime.UtcNow;
int deltaMonday = DayOfWeek.Monday - today.DayOfWeek;
var monday = today.AddDays(deltaMonday);


int deltaWednesday = DayOfWeek.Wednesday - today.DayOfWeek;
var wednesday = today.AddDays(deltaWednesday);

int deltaSaturday = DayOfWeek.Saturday - today.DayOfWeek;
var saturday = today.AddDays(deltaSaturday);

But i want to show the next (eg) monday date if this (week) monday is passed away and similarly for wednesday and saturday too. 但是如果这个(星期)星期一过世了,我想显示下一个(例如)星期一日期,同样也要显示星期三和星期六。 If the (current) month is passed away, then next month days should be displayed. 如果(当前)月份已过,则应显示下个月的日期。 Is there any shorter way to get or change my code? 有没有更短的方法来获取或更改我的代码?

Try this - 尝试这个 -

 DateTime today = DateTime.UtcNow;
 int deltaMonday = DayOfWeek.Monday - today.DayOfWeek;
 var monday = today.AddDays(deltaMonday += deltaMonday < 0 ? 7 : 0);

 int deltaWednesday = DayOfWeek.Wednesday - today.DayOfWeek;
 var wednesday = today.AddDays(deltaWednesday += deltaWednesday < 0 ? 7 : 0);

 int deltaSaturday = DayOfWeek.Saturday - today.DayOfWeek;
 var saturday = today.AddDays(deltaSaturday += deltaSaturday < 0 ? 7 : 0);

In short, if the day is passed away, that is the difference is negative, then just add 7 days to it. 简而言之,如果这一天过去了,那就是差值为负,那么只需增加7天即可。

Do similar things if you need to check for months. 如果您需要检查数月,请执行类似的操作。

try this- 尝试这个-

 Public DateTime GetNextWeekday(DayOfWeek day)
 {
     DateTime result = DateTime.Now.AddDays(1);
     while( result.DayOfWeek != day )
          result = result.AddDays(1);
     return result;
 }

 DateTime deltaMonday=GetNextWeekday(1)
 DateTime deltaWednesday=GetNextWeekday(3)
 DateTime deltaSaturday=GetNextWeekday(6)

If you know how many days ahead you need to look, you could use linq. 如果您知道需要查看多少天,则可以使用linq。 The code below finds all Monday, Wednesday and Saturday in the next 100 days: 以下代码可找到接下来100天内的所有星期一,星期三和星期六:

var daysAhead = Enumerable.Range(0, 100);
var dates = daysAhead.Select (a => DateTime.Today.AddDays(a))
                         .Where (a => a.DayOfWeek == DayOfWeek.Monday ||
                                      a.DayOfWeek == DayOfWeek.Wednesday ||
                                      a.DayOfWeek == DayOfWeek.Saturday ).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM