2014-10-01 2 views
1

Я изо всех сил пытаюсь понять, как получить нумерованный день (месяца), соответствующий строке, содержащей имя этого дня. Например, предположим, что понедельник - первое января. Я заполняю строку словом «понедельник». При создании строки cron мне нужно изменить «понедельник» на «1».Получение целого числа для даты ввода строки

Просто использование «Понедельник» не является вариантом, так как конкретная строка, которую я создаю, указывает следующий Понедельник (и только следующий понедельник) в качестве заданной даты.

Я могу видеть, как сделать сравнение с статьей MSDN, которая касается DateTime.DayOfWeek, однако я очень не уверен, как это сделать, чтобы получить целое число, соответствующее дате следующего понедельника.

PS - Я ужасно осознаю, что это страшное форматирование, но для жизни меня я не знаю, как это лучше сказать. Вы можете пойти.

+0

Итак, вы хотите найти дату следующего понедельника, начиная с сегодняшнего дня, не так ли? Что, если сегодня понедельник, мы используем сегодняшнюю дату или находим следующую? –

+0

@UlugbekUmirov Ну, на британском английском языке «В этот понедельник» всегда подразумевается следующий понедельник, независимо от того, понедельник ли это. Итак, отвечая на ваш вопрос, да. Я хочу найти дату следующего понедельника; И да, мы находим следующую дату, если сегодня понедельник. – Wolfish

+1

http://stackoverflow.com/a/6346190/1803777 –

ответ

1

Если вы хотите рассчитать следующий понедельник, кажется, что код уже перечислены на StackOverflow (например Datetime - Get next tuesday). Преобразование дневной строки в перечисление DayOfWeek должно быть довольно тривиальным, если вы поддерживаете только английский (просто используйте что-то вроде Enum.Parse()). В противном случае вы можете принять во внимание текущую культуру, как указано в ответе @Patrick Hofman.

+0

Отлично, я ценю ссылку. Большое спасибо. – Wolfish

2

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

Вы можете перебрать dayNamesShifted, чтобы сравнить название дня и вернуть его индекс.

int firstDayOfWeek = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; 
string[] dayNamesShifted = Shift(CultureInfo.CurrentCulture.DateTimeFormat.DayNames, firstDayOfWeek); 

Где Shift является:

private static T[] Shift<T>(T[] array, int positions) 
{ 
    T[] copy = new T[array.Length]; 
    Array.Copy(array, 0, copy, array.Length - positions, positions); 
    Array.Copy(array, positions, copy, 0, array.Length - positions); 
    return copy; 
} 
+0

Это ... сложно. Я не уверен, что мне нужно изменить их, учитывая, что воскресенье всегда является первым днем ​​недели, когда речь заходит о Quartz.NET. Кроме того, разве это не даст мне число от 1 до 7, в отличие от даты фактического дня? – Wolfish

+1

Это правда. Разве это не ваш вопрос? Полагаю, я тогда неправильно понял. Вы можете уточнить? –

+1

Если это не тот ответ, который вы искали, по крайней мере, это поможет вам определить, где вы находитесь на этой неделе, и узнать, сколько дней вам нужно добавить. –

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