簡體   English   中英

檢查時間是否在 C# 中指定的時間范圍內

[英]check for time fall between specified time range in c#

我正在嘗試檢查當前時間是否介於下午 6 點(晚上) - 早上 7 點()(第二天)之間,如果當前時間介於兩者之間,那么我必須發送郵件:

下面是我的代碼:

    private static TimeZoneInfo pacific_Standard_Time = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
    private static TimeSpan Stime = DateTime.Parse("6:00:00 PM").TimeOfDay; //set start time
    private static TimeSpan Etime = DateTime.Parse("7:00:00 AM").TimeOfDay; //set End time

    private static string getSenderEmailID()
    {
        String strEmail = "";
        DateTime dateTime_Time = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, pacific_Standard_Time);  //get current time

//Check if current time falls between 6PM to 7AM
        if ((dateTime_Time.TimeOfDay > Stime) && (dateTime_Time.TimeOfDay < Etime))
        {
            strEmail = ConfigurationManager.AppSettings["NewUserEmailRedirectTo"];
        }
        else
        {
            strEmail = ConfigurationManager.AppSettings["NewUserEmailTo"];
        }
        return strEmail;
    }

但是我的代碼沒有檢查當前時間是否在下午 6 點(白天晚上)- 早上 7 點(第二天早上)之間,我在 C# 方面沒有太多經驗,請讓我知道我哪里出錯了

一個小時不能同時(沒有雙關語意)大於下午的時間小於另一個上午的時間。

例如,偽代碼

//         true               &&            false               == false
"08:00:00 PM" > "06:00:00 PM" && "08:00:00 PM" < "07:00:00 AM"

始終評估為false"08:00:00 PM" > "07:00:00 AM"false ),與此相同

//         false              &&            true               == false
"05:00:00 AM" > "06:00:00 PM" && "05:00:00 AM" < "07:00:00 AM"

將始終為false"05:00:00 AM" > "06:00:00 PM"為假)

將您的條件更改為:

// Check this ------------------------VV
if ((dateTime_Time.TimeOfDay > Stime) || (dateTime_Time.TimeOfDay < Etime)) { ... }

您的問題有一些不清楚的地方。 不過,從表面上看,您的 if 條件本質上是“Time_Of_Day 是下午 6 點之后和早上 7 點之前”。 這種情況永遠不會是真實的。

如果您正在查看某一天,那么您想要的是“Time_Of_Day 是下午 6 點之后或早上 7 點之前”,並且您的條件應該寫為(dateTime_Time.TimeOfDay > Stime) || (dateTime_Time.TimeOfDay < Etime) (dateTime_Time.TimeOfDay > Stime) || (dateTime_Time.TimeOfDay < Etime)

不過,更有可能的是,您想要實現的是跨越數天的檢查。 在這種情況下,您想要的是“Time_Of_Day 是今天下午 6 點之后或明天早上 7 點之前”。 在這種情況下,您的情況應該像

private static DateTime Stime = DateTime.Now.Date.AddHours(18);
private static DateTime Etime = DateTime.Now.Date.AddDays(1).AddHours(7);

...

if((dateTime_Time> Stime) && (dateTime_Time < Etime))
{
...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM