Добавить 1 неделю до текущей даты

У меня есть что-то вроде этого DateTime.Now.ToString("dd.MM.yy"); В моем коде, и мне нужно добавить 1 неделю к нему, например 5.4.2012, чтобы стать 12.4.2012. Я попытался преобразовать его в int и затем добавить его, но есть проблема, когда это до 30.

Можете ли вы сказать мне какой-нибудь умный способ, как это сделать?

Ответ 1

Вы хотите оставить его как DateTime, пока не будете готовы преобразовать его в строку.

DateTime.Now.AddDays(7).ToString("dd.MM.yy");

Ответ 2

Во-первых, всегда сохраняйте данные в собственном типе, пока вы не будете готовы либо отобразить их, либо сериализовать (например, в JSON или сохранить в файл). Вы не конвертируете две переменные типа int в строки перед их добавлением или умножением, поэтому не делайте этого и с датами.

Пребывание в нативном типе имеет несколько преимуществ, таких как внутреннее хранение DateTime виде 8 байтов, что меньше, чем у большинства форматов строк. Но самое большое преимущество заключается в том, что .NET Framework предоставляет вам множество встроенных методов для выполнения вычислений даты и времени, а также для анализа значений даты и времени из исходной строки. Полный список можно найти здесь.

Таким образом, ваш ответ становится:

  • Получить текущую метку времени из DateTime.Now. Используйте DateTime.Now.Date если вы предпочитаете использовать полночь, а не текущее время.
  • Используйте AddDays(7) чтобы вычислить одну неделю спустя. Обратите внимание, что этот метод автоматически учитывает перенос на следующий месяц или год, если это применимо. Для вас также учитываются високосные дни.
  • Преобразуйте результат в строку, используя желаемый формат
// Current local server time + 7 days
DateTime.Now.AddDays(7).ToString("dd.MM.yy");

// Midnight + 7 days
DateTime.Now.Date.AddDays(7).ToString("dd.MM.yy");

И есть много других методов в рамках, чтобы помочь с:

  • интернационализация
  • UTC и часовые пояса (хотя вы можете проверить NodeTime для более сложных приложений)
  • Перегрузка оператора для некоторых основных математических вычислений
  • Класс TimeSpan для работы с временными интервалами

Ответ 3

По какой-либо причине вы не можете использовать метод AddDays, как в

DateTime.Now.AddDays(7)