2009-08-18 2 views
0

Nettoarbeitsrahmen Punkt 2, wie zu erkennen, ob die aktuelle Zeit zwischen 15.31 ist - 15.45

, wie diese zu verbessern und einfach ich oft

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; 
    } 
} 
+3

ich nicht die Logik der letzten verstanden haben, wenn ... Das würde nie vorkommen, weil (m> = 46) && (m == 0) niemals wahr sein wird ... Sollte es sein if (((h == 15) && (m> = 46)) || ((h == 16) && (m == 0))) { zurück "15.46 - 16.00"; } – awe

+0

Sie müssen nicht überprüfen (s <= 59) als Sekunden sind immer von 0 bis 59. – awe

Antwort

9
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!"); 
+0

+1 können Sie direkt mehr als Zahlen vergleichen. –

+0

Wenn das Muster für die Minutenspanne für alle Stunden eines Tages gelten soll, führt dies zu vielen if-Anweisungen ... – awe

+0

Nicht wirklich, Sie kommen einfach in TimeSpans und dergleichen oder verwenden Ihre eigene Lösung. Der Punkt war mehr, dass Sie DateTime's direkt vergleichen können, und Sie * sollten *, sie nicht zu Zeichenketten analysieren, dann die Zeichenketten zu ganzen Zahlen analysieren und so herum fummeln. –

1

Warum Sie Zeichenfolge stattdessen verwenden muß verwendet direkt von Datetime, können Sie DateTime.TimeofDay

0

Nun verwenden, würde ich getTimeZone aus der Seite Klasse nehmen und es in einer util Klasse setzen für einen Start ...

+2

Holen Sie es zuerst zu arbeiten, und dann in anderen Szenarien verfügbar machen, indem Sie es in einer Utility-Klasse verfügbar machen. – awe

+0

Nun, es hört sich an, als ob es bereits funktioniert, er will nur eine Art, es zu tun. Er sagt, er hat es oft benutzt, also nehme ich an, dass dieser Code im Moment überall ist. Es in die Util-Klasse zu bringen, wird ihm helfen, wenn er refactoring ist. – UpTheCreek

0

Sie könnten die Zeichenfolgen zu DateTime-Objekten analysieren und vergleichen. Sie verwenden auch string.CompareTo(), um die Strings direkt zu vergleichen.

+0

Das ist nicht nötig, da er mit DateTime-Objekten beginnt und ToString auf ihnen aufruft ... –

2

Was ist so etwas wie dieses:

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 ""; 
} 
0
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"); 
} 
1

Dies würde funktionieren, wenn gleiche Muster für alle Stunden:

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 ""; 
} 
Verwandte Themen