2013-04-14 3 views
2

Все,Как проверить, что 8:00 вечера действителен до 12:00?

Я недавно posted a question об ограничении пользователей заходил на 4 часа и получал отличные отзывы/ответы.

Но я столкнулся с сценарием, который меня озадачил.

Заказчик с 8:00 до 12:00 AM следующего дня для входа - всего 4 часа. Тем не менее, мой код видит 8:00 вечера по прошествии времени, а не 8:00 вечера время до 12:00.

Как я могу заставить систему увидеть 8:00 вечера, когда еще не было до 12:00 AM следующего дня?

Вот мой код, используя 12-часовые часы с AM и PM - не UTC или 24-часовой:

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:00 вечера как время, которое еще не прошло до 12:00 AM следующего дня?

благодарит за любую помощь!

+0

Я думаю, что единственный способ, чтобы обойти эту проблему можно также включать дату, когда оба штамповки сессии и при проверке, если/когда она должна закончиться , –

+3

@Cole Johnson - Я слепой компьютерный программист и с трудом использую некоторые функции на сайте здесь, одним из которых является код форматирования. Поскольку вы указали, что мне нужно научиться форматировать, как вы предлагаете мне некоторые инструкции о том, как форматировать код с помощью клавиатуры, а не мыши? – Frekster

+3

@Soner Gönül - большое спасибо за форматирование моего кода. Я видел, как ты это делаешь и по моему последнему вопросу ... очень ценишь. – Frekster

ответ

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 
Смежные вопросы