如何从C#中的日期字符串获取本月的最后一天?

时间:2015-02-12 16:09:10

标签: c#

如何在字符串中找到当月的最后一天?

E.g。如果字符串是“2018年1月”,我将如何将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");
}

3 个答案:

答案 0 :(得分: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。在格式/表示中使用字符串表示。 IMO。同时继续使用DateTime.TryParseDateTime.TryParseExact格式,因为如果解析失败,它将使您免于异常。

答案 1 :(得分:2)

使用此:

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

您将获得2018年1月的天数。然后 你可以建立你的日期时间如下:

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

代替yearmonth,您将放置您感兴趣的年份和月份。

在任何情况下,您必须首先解析字符串并创建有效的DateTime,以获得年份dt.Year和月dt.Monthdt是解析日期时间字符串)。

答案 2 :(得分:0)

试试这个:

DateTime today = DateTime.Today;
DateTime endOfMonth = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddDays(-1);