2016-02-13 4 views
1

Может кто-нибудь, пожалуйста, помогите мне, как рассчитать двухнедельный (14 дней) логика с использованием C# ?, для примера 14 дней начать следующий порядок последовательности февраляВычислить 14 дней порядка последовательности

  • Понедельник дата начала 8 февраля (следующий 22 февраля, 7 марта, 21 марта и т. д.)
  • Дата начала четверга 11 февраля (следующие 25 февраля, 10 марта, 24 марта и т. д.)
  • Пятница начала 12 февраля (следующий 26 февраля, 11 25 марта и т. Д.)

Моя логика не работает в течение 14 дней, потому что 15 февраля добавится 14 дней, на нем будет отображаться дата «First14days» 29 февраля 2016 года, это неправильно.

Это C# логику

Day.Days value are Monday, Thursday, Friday etc.. 
 
foreach (var Day in day) 
 
{ 
 
    Example Day.Days = Monday 
 
    Int 14days = (((int)Enum.Parse(typeof(DayOfWeek), Day.Days) - (int)today.DayOfWeek + 14) % 7); 
 
    DateTime First14days = today.AddDays(14days);          
 
}
Мой вывод должен быть

My output should be

+0

Почему две недели после того, как 15-й не будет 29-го? –

+0

несколько двухнедельных стартов 15 следующий 29 и т. Д. – Rob

+0

Я не вижу проблем только с добавлением 14 дней до 15.02 или 29.02 –

ответ

1

Так вот вы все-в-одном решении:

// determine the date of next given weekday 
DateTime date = GetNextWeekday(DateTime.Today, DayOfWeek.Tuesday); 

// create a list and add the start date (if you want) 
List<DateTime> fortnights = new List<DateTime>() { date }; 

// add as many "fortnights" as you like (e.g. 5) 
for (int i = 0; i < 5; i++) 
{ 
    date = date.Add(TimeSpan.FromDays(14)); 
    fortnights.Add(date); 
} 

// use your list (here: just for printing the list in a console app) 
foreach (DateTime d in fortnights) 
{ 
    Console.WriteLine(d.ToLongDateString()); 
} 

метод, чтобы получить следующий будний день, от: https://stackoverflow.com/a/6346190/2019384

public static DateTime GetNextWeekday(DateTime start, DayOfWeek day) 
{ 
    // The (... + 7) % 7 ensures we end up with a value in the range [0, 6] 
    int daysToAdd = ((int) day - (int) start.DayOfWeek + 7) % 7; 
    return start.AddDays(daysToAdd); 
} 
+0

Привет, d4Rk, ваша логическая верхняя строка в вашем коде, DateTime.Today, DayOfWeek.Monday будет отображаться 15 февраля, 29 февраля, 14 марта и т. Д. Это мое требование заранее, шесть дней должны отображать следующую последовательность Feb 22, March 7, 21 марта и т. Д. Также эта последовательность выполняется вечно, заранее отобразится 6 дней. (он никогда не должен появляться 15 февраля, 29 февраля, 14 марта и т. д.). Мои даты начала катания (всегда заранее) 22 февраля Понедельник, 25 февраля Четверг и 26 февраля Firday. Что мне нужно изменить для вашего кода? – Rob

+0

Просто измените дату начала на то, что вы хотите. 'DateTime date = GetNextWeekday (новый DateTime (2016, 2, 22), DayOfWeek.Monday); ' – d4Rk

8

Просто добавьте TimeSpan.FromDays(14) к любой дате, чтобы получить две недели дальше

DateTime startDate = DateTime.Now; 
TimeSpan fortnight = TimeSpan.FromDays(14); 

for (int i = 0; i < 6; i++) 
{ 
    startDate += fortnight; 
    Console.WriteLine($"Date for fortnight {i}: {startDate:D}"); 
} 
+0

Привет, Übercoder, Можете ли вы объяснить мне, Time Time добавляет дату начала? – Rob

+0

'DateTime newdate = date.Add (TimeSpan.FromDays (14));' – d4Rk

+0

Здравствуйте, d4Rk, Ваша логика всегда добавляет 14 дней. мой вопрос: я хочу сохранить все 6 списков дат заблаговременно, (14 дней). Мой список дат совпадает с 14 порядком логики навсегда (см. Мой заказ). Это никогда не наступило 15 и 29 февраля. Как я могу начать первое свидание 22 февраля? Нужен ли мне первый день жесткого кода? – Rob

4

Если я правильно понимаю ваш вопрос, этот код будет работать на вас.

DateTime time = DateTime.Now; 
DateTime anotherTime = DateTime.Now; 
var allTimes = new HashSet<DateTime>(); 

for (int i = 0; i < 6; i++) 
{ 
    anotherTime = time.AddDays(14); 
    time = anotherTime; 
    Console.WriteLine(anotherTime.ToLongDateString()); 
    allTimes.Add(time); 
} 

// or with your example is possible to like this code. 
foreach (var Day in day) 
{ 
    anotherTime = Day.AddDays(14); 
    time = anotherTime; 
    Console.WriteLine(anotherTime.ToLongDateString()); 
    allTimes.Add(time); 
} 

Сначала создайте два объекта DataTime. затем foreach несколько раз, а в for для оператора цикла установите anotherTime = time.AddDays(14) после этого набора time = anotherTime.

//Output: 
//Saturday, February 27, 2016 
//Saturday, March 12, 2016 
//Saturday, March 26, 2016 
//Saturday, April 09, 2016 
//Saturday, April 23, 2016 
//Saturday, May 07, 2016 

EDIT:

Я создаю и HashSet, где вы можете сохранить все, что вы DateTime, которые вы делаете это.

+0

Привет, evelikov92, мой логический день придет Пример Day.Days = Monday. Как определить, используя системную дату, первую дату, чтобы добавить 14 дней. Например, если день 15 февраля нужно добавить 7 дней на мой выход. Как мне решить эту проблему с кодом C#? – Rob

+0

Благодарим вас за обновление кода. Я добавил детали, пожалуйста, обратитесь к @ d4Rk, мои комментарии. – Rob

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