【问题标题】:how to detect if the current time is between 15.31 - 15.45如何检测当前时间是否在 15.31 - 15.45 之间
【发布时间】:2009-08-18 08:54:35
【问题描述】:

在点网框架中 2

我有很多次如何改进这个并且易于使用

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string timenow = DateTime.Now.ToString("T");
        Label1.Text = DateTime.Now.ToString("T");
        Label3.Text = DateTime.Now.ToString("D");
        Label2.Text = getTimeZone(timenow);
    }

    //hh:mm:ss
    protected string getTimeZone(string time)
    {
        string[] e = time.Split(':');
        int h = Convert.ToInt16(e[0]);
        int m = Convert.ToInt16(e[1]);
        int s = Convert.ToInt16(e[2]);

        if ((h == 15) && (m >= 1) && (m <= 30) && (s <= 59))
        {
            return "15.01 - 15.30";
        }
        if ((h == 15) && (m >= 31) && (m <= 45) && (s <= 59))
        {
            return "15.31 - 15.45";
        }
        if ((h == 15) && (m >= 46) && (m == 0) && (s <= 59))
        {
            return "15.31 - 15.45";
        }

        return time;
    }
}

【问题讨论】:

  • 我不明白最后一个 if 的逻辑...这永远不会发生,因为 (m >= 46) && (m == 0) 永远不会是真的...应该是if ( ((h == 15) && (m >= 46)) || ((h == 16) && (m == 0)) ) { return "15.46 - 16.00"; }
  • 你不需要检查 (s

标签: asp.net datetime


【解决方案1】:
DateTime now = DateTime.Now;
DateTime start = new DateTime(now.Year, now.Month, now.Day, 15, 31, 0);
DateTime end = new DateTime(now.Year, now.Month, now.Day, 15, 45, 0);

if (now >= start && now <= end)
    Console.WriteLine("We have a go!");

【讨论】:

  • 如果您希望分钟跨度的模式适用于一天中的所有小时,这将导致大量 if 语句...
  • 不是真的,你只是进入 TimeSpans 之类的,或者使用你自己的解决方案。更重要的是您可以直接比较 DateTime,并且您应该,而不是将它们解析为字符串,然后将字符串解析为整数并像这样摆弄。
  • 我同意你不应该通过字符串解析去 int 和摆弄。你的回答很好地说明了这一点。我提供了一个答案,它直接从 DateTime 对象中取出不同的部分,并检查它的分钟部分。这样,它也适用于一天中的任何时间。当然,这仅适用于所有小时的分钟模式相同...
【解决方案2】:

这样的事情怎么样:

protected void Page_Load()
{
    DateTime timenow = DateTime.Now;
    Label2.Text = getTimeZone(timenow);
}

//hh:mm:ss
protected string getTimeZone(DateTime time)
{
    if (time.Hour == 15 && time.Minute >= 1 && time.Minute <= 30)
        return "15.01 - 15.30";
    if (time.Hour == 15 && time.Minute >= 31 && time.Minute <= 45)
        return "15.31 - 15.45";
    return "";
}

【讨论】:

    【解决方案3】:

    为什么你直接使用字符串而不是 DateTime,你可以使用 DateTime.TimeofDay

    【讨论】:

      【解决方案4】:

      如果所有时间都使用相同的模式,这将起作用:

      protected void Page_Load()
      {
          DateTime timenow = DateTime.Now;
          Label1.Text = timenow.ToString("T");        
          Label3.Text = timenow.ToString("D");        
          Label2.Text = getTimeZone(timenow);         
      }
      
      //hh:mm:ss
      protected string getTimeZone(DateTime time)
      {
          if (time.Minute >= 1 && time.Minute <= 30)
              return String.Format("{0:00}.01 - {0:00}.30", time.Hour);
          if (time.Minute >= 31 && time.Minute <= 45)
              return String.Format("{0:00}.31 - {0:00}.45", time.Hour);
          if (time.Minute >= 46)
              return String.Format("{0:00}.46 - {1:00}.00", time.Hour, (time.Hour < 23) ?  time.Hour+1 : 0);
          if (time.Minute == 00)
              return String.Format("{0:00}.46 - {1:00}.00", (time.Hour > 0) ? time.Hour-1 : 23, time.Hour);
          return "";
      }
      

      【讨论】:

        【解决方案5】:

        好吧,我会从页面类中取出 getTimeZone 并将其放入一个实用程序类中...

        【讨论】:

        • 先让它工作,然后考虑通过在实用类中公开它来使其在其他场景中可用。
        • 好吧,听起来它已经开始工作了,他只是想要一种更好的方法。他说他已经用过很多次了,所以我认为这段代码现在到处都是。把它放在 util 类中会在他重构时帮助他。
        【解决方案6】:

        您可以将字符串解析为 DateTime 对象并进行比较。 您还可以使用 string.CompareTo() 直接比较字符串。

        【讨论】:

        • 甚至不需要这样做,因为他从 DateTime 对象开始并在它们上调用 ToString...
        【解决方案7】:
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
        
            Label1.Text = now.ToString("T");
            Label3.Text = now.ToString("D");
        
            if (now.Hour == 15 && now.Minute >= 1 && now.Minute <= 30)
                Label2.Text = "15.01 - 15.30";
            else if (now.Hour == 15 && now.Minute >= 31 && now.Minute <= 45)
                Label2.Text = "15.31 - 15.45";
            else
                Label2.Text = now.ToString("T");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-11
          • 1970-01-01
          • 2014-01-04
          • 2021-06-29
          相关资源
          最近更新 更多