2

全て、

私は最近、ユーザーのログインを 4 時間に制限することに関する質問を投稿し、素晴らしいフィードバック/回答を得ました。

しかし、私は困惑するシナリオに遭遇しました。

顧客は、午後 8 時から翌日の午前 12 時まで、合計 4 時間ログインする必要があります。ただし、私のコードでは、午後 8:00 が午前 12:00 より前ではなく、時間が経過したときに午後 8:00 と表示されます。

午後 8 時を翌日の午前 12 時までまだ経過していない時間としてシステムに認識させるにはどうすればよいですか?

UTC や 24 時間制ではなく、AM と PM を含む 12 時間制を使用するコードを次に示します。

var orderTime = Convert.ToDateTime(orderDate); // 8:00 PM
var expirationTime = orderTime.AddHours(4); // 12:00 AM of the next day

// timeRemaining should be 4 hours but is 0
// DateTime.Now is 8:00 PM of the current day
// so timeRemaining = 8:00 PM - 12:00 AM (should be 4 hours) 
var timeRemaining = expirationTime - DateTime.Now;

// should be greater than 0 since timeRemaining is actually 4 hours (8:00 PM up to 12:00 AM of next day)
// but fails seeing it as passed
if (timeRemaining < TimeSpan.Zero)                     
    Response.Redirect("TimedOut.aspx");

このシナリオを有効にするにはどうすればよいですか? つまり、午後 8 時を翌日の午前 0 時までに経過していないと見なすシステムですか。

助けてくれてありがとう!

4

1 に答える 1

1

あなたのコードは私にとって完璧に機能しています。ここに表示されていないコードか、その他のばかげた理由があると思います。私はこのコード(およびその多くのバリエーション)でテストしていました:

// force the date format to be 12hour like in US
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

DateTime start = DateTime.Parse("1/1/2013 7:00 PM").ToUniversalTime();
DateTime end = start.AddHours(5); // returns 1/2/2013 12:00:00 AM as it should

Console.WriteLine(end - start); // 05:00:00
Console.WriteLine((end - start) > TimeSpan.Zero); // True
于 2013-04-14T09:50:06.237 に答える