【问题标题】:How to check date day is between two given days [duplicate]如何检查日期日期在给定的两天之间[重复]
【发布时间】:2016-06-28 06:00:33
【问题描述】:

我必须检查我的特定日期日期是否在两个字符串日期之间或等于它们 例如:

var startDay = "Saturday";
var endDay = "Tuesday";
DateTime myDate = DateTime.Now;
if(myDate.DayofWeek >= startDay && myDate.DayofWeek <= endDay){
//some code here...
}

【问题讨论】:

  • 重复,真的吗?那是关于将字符串转换为枚举,这当然是 OP 需要做的一件事,但这里的问题是关于确定日期是否在两个工作日之间。

标签: c# datetime date-comparison


【解决方案1】:

您可以使用DayOfWeek 枚举。

if(myDate.DayOfWeek >= DayOfWeek.Tuesday 
   && myDate.DayOfWeek <= DayOfWeek.Saturday)
{
    // This would catch the days from Tuesday to Saturday
}

如果您想赶上从周六到周二的日子,您必须更改一些代码。

    if(myDate.DayOfWeek >= DayOfWeek.Saturday 
    || myDate.DayOfWeek <= DayOfWeek.Tuesday)
{
    // This would catch the days from Tuesday to Saturday
}

如果您的startDateendDate 发生变化。然后你需要解析第一个并做一些额外的检查。

DayOfWeek startDayOfWeek;
DayOfWeek endDayOfWeek;
if (!Enum.TryParse(startDay, out startDayOfWeek))
{
    // Something wrong happened and you have to handle it.
}
if (!Enum.TryParse(endDay, out endDayOfWeek))
{
    // Something wrong happened and you have to handle it.
}
if (
       ((int)startDayOfWeek < (int)endDayOfWeek
         && myDate.DayOfWeek >= startDayOfWeek
         && myDate.DayOfWeek <= endDayOfWeek)
    || ((int)startDayOfWeek > (int)endDayOfWeek
         && (myDate.DayOfWeek >= startDayOfWeek
             || myDate.DayOfWeek <= endDayOfWeek))
   )
{

}

【讨论】:

  • 不是 OP 正在寻找的答案是星期六和星期二之间的那一天吗?这个是在星期二和星期六之间,正好相反。
  • 我在问题中提到的两天是动态的,它们可以随时更改,因此在这种情况下您的解决方案将不起作用。
  • @juunas 你是对的 :) 我更正了我的答案。
  • @Slan 现在可以动态工作了。
  • @Christos 非常感谢
【解决方案2】:

您可以将这些字符串解析为 DayOfWeek 枚举:

var startDay = "Saturday";
var endDay = "Tuesday";
DayOfWeek startDayOfWeek, endDayOfWeek;
if (!Enum.TryParse(startDay, out startDayOfWeek))
   // error handlnig
if (!Enum.TryParse(endDay, out endDayOfWeek))
   // error handlnig
DateTime myDate = DateTime.Now;
if(myDate.DayofWeek >= startDayOfWeek && myDate.DayofWeek <= endDayOfWeek){
    //some code here...
}

但这带来了另一个问题:DayOfWeek 的值从星期日 (0) 到星期六 (6)。根据您定义的一周开始或 between 的含义,您可能需要调整这些值。

所以这里有一个建议:

int startDayAsInt = (int)startDayOfWeek; // the parsed value from above
int endDayAsInt = (int)endDayOfWeek;
int myDateAsInt = (int)myDate.DayOfWeek;

if (endDayAsInt < startDayAsInt) endDayAsInt += 7;
if (myDateAsInt < startDayAsInt) myDateAsInt += 7;
if (myDateAsInt >= startDayAsInt && myDateAsInt <= endDayAsInt)
    // do something

这应该适用于所有组合,因为如果它们在开始日之前,它会将几天投射到“下”周。

【讨论】:

  • 沃格特非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-05
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多