C# 日期时间范围
C# datetime scope
假设我无法更改 returns 数据的服务,我只剩下
var date = "20140231";
var scope = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture);
很明显,“20140231”是 2 月底 的懒惰说法。输入“20140231”获取 2 月最后一个日期的最简洁方法是什么?
有 1 个约束 - 这应该适用于 .net 2.0。
您可以创建一个 while
,将日期分割成多个部分,并不断从天部分中减去一个,直到它成为一个有效日期。不过,这确实应该在入口端修复。
试试这个:
var date = "20140231";
DateTime scope;
bool dateValid = DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out scope);
while (!dateValid)
{
string yearMonth = date.Substring(0, 4);
int day = Convert.ToInt32(date.Substring(6, 2));
if (day > 1)
{
day--;
}
else
{
break;
}
date = yearMonth + day.ToString().PadLeft(2, '0');
dateValid = DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out scope);
}
February can have only 28
or 29
days depends on current year is a leap year与否。
任何一年都不能有 30
或 31
天。这就是您无法成功解析 20140231
字符串的原因。
二月的最后一天你可以很清楚的点赞;
DateTime lastDayOfFebruary = (new DateTime(2014, 2, 1)).AddMonths(1).AddDays(-1);
如果您的服务总是将年份作为前 4 个字符,您可以使用 .Substring()
to get year and pass DateTime
constructor 作为年份。
var date = "20140231";
string year = date.Substring(0, 4);
DateTime lastDayOfFebruary = (new DateTime(int.Parse(year), 2, 1)).AddMonths(1).AddDays(-1);
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));
假设我无法更改 returns 数据的服务,我只剩下
var date = "20140231";
var scope = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture);
很明显,“20140231”是 2 月底 的懒惰说法。输入“20140231”获取 2 月最后一个日期的最简洁方法是什么?
有 1 个约束 - 这应该适用于 .net 2.0。
您可以创建一个 while
,将日期分割成多个部分,并不断从天部分中减去一个,直到它成为一个有效日期。不过,这确实应该在入口端修复。
试试这个:
var date = "20140231";
DateTime scope;
bool dateValid = DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out scope);
while (!dateValid)
{
string yearMonth = date.Substring(0, 4);
int day = Convert.ToInt32(date.Substring(6, 2));
if (day > 1)
{
day--;
}
else
{
break;
}
date = yearMonth + day.ToString().PadLeft(2, '0');
dateValid = DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out scope);
}
February can have only 28
or 29
days depends on current year is a leap year与否。
任何一年都不能有 30
或 31
天。这就是您无法成功解析 20140231
字符串的原因。
二月的最后一天你可以很清楚的点赞;
DateTime lastDayOfFebruary = (new DateTime(2014, 2, 1)).AddMonths(1).AddDays(-1);
如果您的服务总是将年份作为前 4 个字符,您可以使用 .Substring()
to get year and pass DateTime
constructor 作为年份。
var date = "20140231";
string year = date.Substring(0, 4);
DateTime lastDayOfFebruary = (new DateTime(int.Parse(year), 2, 1)).AddMonths(1).AddDays(-1);
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));