如何在字符串中找到当月的最后一天?
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");
}
答案 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.TryParse
或DateTime.TryParseExact
格式,因为如果解析失败,它将使您免于异常。
答案 1 :(得分:2)
使用此:
var days = DateTime.DaysInMonth(2018, 01);
您将获得2018年1月的天数。然后 你可以建立你的日期时间如下:
DateTime lastDayForMonth = new DateTime(year, month, days-1);
代替year
和month
,您将放置您感兴趣的年份和月份。
在任何情况下,您必须首先解析字符串并创建有效的DateTime
,以获得年份dt.Year
和月dt.Month
(dt
是解析日期时间字符串)。
答案 2 :(得分:0)
试试这个:
DateTime today = DateTime.Today;
DateTime endOfMonth = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddDays(-1);