2016-11-23 2 views
0

Мне нужно проверить, соответствует ли переменная DateTime между двумя неделями раз.DateTime соответствует Timespan/Timezone

Что-то вроде 23.11.2016 14:08 является или между:

  • понедельник 18:00 и 22:00 понедельник или
  • понедельник 22:00 и вторник 07:00

На данный момент я могу проверить, существует ли День между ан правильные дни:

DateTime dTime = DateTime.Parse(/*String from sql database*/); 
            // German weekday abbreviations 
String[] Days = new string[] { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; 

string Day = dTime.ToString("ddd", new CultureInfo("de-DE")); 
string DayFrom = "Di"; 
string DayTill = "Mi"; 

int DayposStop = Array.IndexOf(Days, Day); 
int DayposFrom = Array.IndexOf(Days, DayFrom); 
int DayposTill = Array.IndexOf(Days, DayTill); 

if (((DayposFrom <= Daypos || Daypos <= DayposTill) 

Я начал строить то, что выглядит почти то же самое в течение времени, но , не работал.

Есть ли более простой способ, которым я не знаю или другого решения? Мне просто нужно проверить, работал ли кто-то за пределами обычного рабочего периода.

+1

'('23 .11.2016 18.00' <'23 .11.2016 14:08' <= '23 .11.2016 22.00') || ('23 .11.2016 22.00 '<'23 .11.2016 14:08' <= '24 .11.2016 07.00 '). 'Это то, что вам нужно, правильно? –

+0

да что-то в этом роде, но у меня нет дат его только понедельника или пятницы нет 21. Октобер или около того – MaxW

ответ

0

После того, как я много пытался и много искал, я пришел к выводу, что я не мог решить свою проблему определенным образом (с периодами времени между рабочими сменами и праздниками и т. Д.), Но я нашел стороннюю библиотеку, которая может предоставить все, что мне может понадобиться.

http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET

1

Я редактирую все, чтобы изменить ответ, так как я не очень хорошо понял ваш вопрос.

Вы можете сделать следующее:

TimeSpan timeFrom = new TimeSpan(15,40,00); 
TimeSpan timeUntil = new TimeSpan(22,00,00); 

if (yourDate.TimeOfDay > timeFrom && yourDate.TimeOfDay < timeUntil) 
{ 
    return; 
} 

Для проверки день недели вы можете принять, что ответить, прежде чем SEFE.

+0

не будет работать для меня, потому что даты для проверки не совпадают с его понедельником с 12:00 до понедельника 13:00 каждую неделю, а не настоящую дату. – MaxW

+0

Отредактировано, чтобы изменить свой ответ, чтобы он соответствовал вашему вопросу –

1

Вы можете использовать DateTime.DayOfWeek:

DateTime dTime = DateTime.Parse(/*String from sql database*/); 
DayOfWeek weekdayFrom = DayOfWeek.Tuesday; 
DayOfWeek weekdayTo = DayOfWeek.Wednesday; 

if ((dTime.DayOfWeek >= weekdayFrom) && (dTime.DayOfWeek <= weekdayTo)) 

Один Sidenote хотя: DayOfWeek перечисление начинается в воскресенье, как в первый день и заканчивается в субботу, как в последний день. Если это имеет значение для вас, вы должны использовать CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek, чтобы сначала компенсировать свой рабочий день.

UPDATE:

Если вы хотите, чтобы проверить ваше время, вы тоже должны проверить фактическую разницу во времени:

DateTime dTime = DateTime.Parse(/*String from sql database*/); 
DayOfWeek weekdayFrom = DayOfWeek.Tuesday; 
DayOfWeek weekdayTo = DayOfWeek.Wednesday; 
double hourFrom = 12; 
double hourTo = 18; 

DateTime periodStart = dTime.AddDays(weekdayFrom - dTime.DayOfWeek).Date.AddHours(hourFrom); 
DateTime periodEnd = dTime.AddDays(weekdayTo - dTime.DayOfWeek).Date.AddHours(hourTo); 

if ((dTime >= periodStart) && (dTime <= periodEnd)) 

Опять же, вам, возможно, придется компенсировать с FirstDayOfWeek.

+0

, который сократил бы мой код выше больших, но что с Timespan между 10:00 и 16:00? – MaxW

Смежные вопросы