この質問は何度も聞かれたことは知っていますが、私の質問には少しひねりがあります。仕事にはさまざまなシフトがあり、2 つの文字列shiftStartとshiftEndがあります。(例: それぞれ「6:00:00 PM」と「03:00:00 AM」)。これは正午から朝までを表します。DateTime.Now がこの期間内にあるかどうかを通知する関数を作成しようとしています。
注: シフトは何でもかまいません... 朝から正午、正午から朝、固定時間 (8 時間など)はありません。
static bool NowWithinShiftTime("6:00:00 PM", "03:00:00 AM")
以下は私が試したことですが、何をしてもロジックが見つからないようです...助けてください...
static bool NowWithinShiftTime(string shiftStart, string shiftEnd)
{
DateTime startDate;
DateTime endDate;
DateTime now = DateTime.Now;
TimeSpan startTime = DateTime.Parse(shiftStart).TimeOfDay;
TimeSpan endTime = DateTime.Parse(shiftEnd).TimeOfDay;
if (startTime < endTime) // same day
{
startDate = new DateTime(now.Year, now.Month, now.Day) + startTime;
endDate = new DateTime(now.Year, now.Month, now.Day) + endTime;
}
else // next day
{
startDate = new DateTime(now.Year, now.Month, now.AddDays(-1).Hour) + startTime;
endDate = DateTime.Today.AddDays(1) + endTime;
}
if (now >= startDate && now <= endDate)
{
return true;
}
else
{
return false;
}
}