C# 在C中使用date

C# 在C中使用date,c#,asp.net,datetime,C#,Asp.net,Datetime,我有很多公司,每个公司都有一个开业日期和一个截止日期,例如: Company Open Close 在网页上,用户必须看到公司列表,并根据当前时间服务器时间显示每个公司的打开或关闭状态 问题是: 当公司在同一天开张和关门时,很容易获得状态 在以下算法中:isOpen=NOW>OpenTime和NOW10.00和1.00openTime&&nowopenTime | | nowopenTime&&nowopenTime | | now

我有很多公司,每个公司都有一个开业日期和一个截止日期,例如:

Company  Open   Close
在网页上,用户必须看到公司列表,并根据当前时间服务器时间显示每个公司的打开或关闭状态

问题是: 当公司在同一天开张和关门时,很容易获得状态 在以下算法中:isOpen=NOW>OpenTime和NOW10.00和1.00<02.00为假,但实时打开


当关闭时间日与打开时间日不同时,我如何解决此问题?如果打开时间晚于关闭时间,则反转测试。

如果打开时间晚于关闭时间,然后反向测试。

我能想到的最简单的解决方案是检查列出的关闭时间是否小于打开时间并加上24小时,然后对照该值进行检查

isOpen = (NOW > OpenTime AND NOW < (ClosingTime < OpeningTime ? ClosingTime + 24.00 : ClosingTime)

我能想到的最简单的解决方案是检查列出的关闭时间是否小于打开时间并加上24小时,然后对照该值进行检查

isOpen = (NOW > OpenTime AND NOW < (ClosingTime < OpeningTime ? ClosingTime + 24.00 : ClosingTime)

如果我理解正确,有以下算法:

当打开时间小于关闭时间时:isOpen=now>openTime&&now 否则,isOpen=now>openTime | | now
注意:TimeSpan结构已用于时间间隔表示,但也可以通过简单替换使用double。

如果我理解正确,则有以下算法:

当打开时间小于关闭时间时:isOpen=now>openTime&&now 否则,isOpen=now>openTime | | now
注意:TimeSpan结构已用于时间间隔表示,但也可以通过简单的替换使用double。

类似这样的操作可以:

class Company
{
  public string   Name         { get ; set ; }

  // represents the time-of-day at which the company opens (e.g. 08:00, 14:00, etc.)
  public TimeSpan OpensAtTime  { get ; set ; }

  // represents the time-of-day at which the company closes (e.g.17:00, 08:00, etc. )
  public TimeSpan ClosesAtTime { get ; set ; }

  public bool IsOpen()
  {
    DateTime instant          = DateTime.Now ;
    DateTime Today            = instant.Date ;
    TimeSpan totalOpenHours   = ( this.ClosesAtTime - this.OpensAtTime ).Duration() ;
    DateTime openTimeToday    = Today + this.OpensAtTime ;
    DateTime closingTimeToday = openTimeToday + totalOpenHours ;
    bool     isOpen           = instant >= openTime && instant <= closingTime ;

    return isOpen ;
  }

}

像这样的事情会对你有帮助:

class Company
{
  public string   Name         { get ; set ; }

  // represents the time-of-day at which the company opens (e.g. 08:00, 14:00, etc.)
  public TimeSpan OpensAtTime  { get ; set ; }

  // represents the time-of-day at which the company closes (e.g.17:00, 08:00, etc. )
  public TimeSpan ClosesAtTime { get ; set ; }

  public bool IsOpen()
  {
    DateTime instant          = DateTime.Now ;
    DateTime Today            = instant.Date ;
    TimeSpan totalOpenHours   = ( this.ClosesAtTime - this.OpensAtTime ).Duration() ;
    DateTime openTimeToday    = Today + this.OpensAtTime ;
    DateTime closingTimeToday = openTimeToday + totalOpenHours ;
    bool     isOpen           = instant >= openTime && instant <= closingTime ;

    return isOpen ;
  }

}

您给出的表达式仅在OpenTime小于closing time时适用,因此:

isOpen = (OpenTime < ClosingTime AND NOW >= OpenTime AND NOW < ClosingTime) OR (NOW >= OpenTime OR NOW < ClosingTime)

您给出的表达式仅在OpenTime小于closing time时适用,因此:

isOpen = (OpenTime < ClosingTime AND NOW >= OpenTime AND NOW < ClosingTime) OR (NOW >= OpenTime OR NOW < ClosingTime)

如果公司C的当前时间是12:00,这是如何工作的。。。它们是关闭的,但是如果你颠倒时间,那么测试会说它是打开的,有边缘情况。这是解决问题的一部分。我认为他在合理的范围内解决了问题,他是来帮助解决他的边缘案件的,所以我认为这正是解决问题的一部分。如果公司C的当前时间是12点,这是如何工作的。。。它们是关闭的,但是如果你颠倒时间,那么测试会说它是打开的,有边缘情况。这是解决问题的一部分。我认为他在合理的范围内解决了问题,他是来帮助解决他的edge案例的,所以我认为这正是解决问题的一部分,因为只需要时间,DateTime结构提供了日期和时间。我的代码使用以下事实:关闭日期是关闭时间小于打开时间的第二天。但您也可以将DateTime与此代码一起使用:因为只需要时间,DateTime结构同时提供日期和时间。我的代码使用以下事实:关闭日期是关闭时间小于打开时间的第二天。但您也可以将DateTime与此代码一起使用: