2015-02-12 4 views
2

Как бы найти последний день текущего месяца, указанный в строке?Как получить последний день месяца из строки даты в C#?

E.g. если строка была «января 2018», как бы я записываю 31/01/2018 как дата

В настоящее время он по умолчанию первым месяца:

string nextEventDateString = "January 2018" 
DateTime tempDate; 

if (DateTime.TryParse(nextEventDateString, out tempDate)) 
{ 
    cRecord.ComplianceDate = tempDate.ToString("dd/MM/yyyy"); 
    cRecord.NotifyDate = tempDate.AddMonths(-1).ToString("dd/MM/yyyy"); 
    cRecord.WarningDate = tempDate.AddMonths(1).ToString("dd/MM/yyyy"); 
} 

ответ

9

Сначала разобрать строку DateTime, позже добавить один месяц и вычитают один день с даты, это даст вам последний день в течение месяца, как:

string dateString = "January 2018"; 
DateTime dt = DateTime.ParseExact(dateString, "MMMM yyyy", CultureInfo.InvariantCulture); 

DateTime lastDateForMonth = dt.AddMonths(1).AddDays(-1); 

как примечание стороны, это кажется, что вы держите строковое представление DateTime в свойствах вашего объекта. Было бы лучше сохранить DateTime вместо string. Используйте строковое представление в форматировании/презентации. ИМО. Также продолжайте использовать DateTime.TryParse или DateTime.TryParseExact с форматом, так как он спасет вас от исключения в случае неудачного разбора.

+0

спасибо - в конце концов, я использовал DateTime.TryParseExact как строка всегда меняется. – joeMarsden

+0

@joeMarsden, добро пожаловать. Вы также можете передать массив настраиваемых форматов в 'Datetime.TryParseExact' для соответствия нескольким форматам. Вы можете увидеть [этот ответ] (http://stackoverflow.com/a/16075279/961113) – Habib

2

Используя это:

var days = DateTime.DaysInMonth(2018, 01); 

вы получите количество дней для января 2018. Тогда вы можете создать свой DateTime, как показано ниже:

DateTime lastDayForMonth = new DateTime(year, month, days-1); 

где вместо year и month вы разместите интересующий вас год и месяц.

В в любом случае вам нужно сначала разобрать свою строку и создать действительный DateTime, чтобы вы получили год, dt.Year и месяц dt.Month (dt - это строка времени синтаксического анализа).

+0

В вашем первом блоке кода вы хардкор год и месяц, но во втором вы используете 'year' и' month' , –

+1

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

0

Попробуйте это:

DateTime today = DateTime.Today; 
DateTime endOfMonth = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddDays(-1); 
Смежные вопросы