C#日期时间范围

Mar*_*gus 0 c# string datetime

假设我无法更改返回数据的服务,我就离开了

var date = "20140231";
var scope = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

显然,"20140231"是说2月底的懒惰方式.通过输入"20140231"获得2月份最后日期的最简洁方法是什么?

有一个约束 - 这应该适用于.net 2.0.

小智 14

string date = "20140231";
DateTime result;
int year = Convert.ToInt32(date.Substring(0, 4));
int month = Convert.ToInt32(date.Substring(4, 2));
int day = Convert.ToInt32(date.Substring(6, 2));

result = new DateTime(year, month, Math.Min(DateTime.DaysInMonth(year, month), day));
Run Code Online (Sandbox Code Playgroud)


Son*_*nül 5

2月可以只有 2829几天取决于当年是闰年与否.

它不能在任何一年3031几天.这就是为什么你不能20140231成功解析你的字符串.

你可以清楚地看到二月的最后一天;

DateTime lastDayOfFebruary = (new DateTime(2014, 2, 1)).AddMonths(1).AddDays(-1);
Run Code Online (Sandbox Code Playgroud)

如果你的服务总是将年份作为前4个字符,你可以.Substring()用来获得年份并将DateTime构造函数作为一年传递.

var date = "20140231";
string year = date.Substring(0, 4);
DateTime lastDayOfFebruary = (new DateTime(int.Parse(year), 2, 1)).AddMonths(1).AddDays(-1);
Run Code Online (Sandbox Code Playgroud)