我有label1 label2和button1,其中我按下按钮1,label1文本将根据上个月的总天数(假设' 31'天)更改,label2文本将根据过去几年的总天数更改(let说' 365'天
我只知道如何使用 DateTime.DaysInMonth 对上个月的总天数进行编码,但 DateTime.DaysInYear 没有方法不是它
这是我的代码
private void button1_Click(object sender, EventArgs e)
{
//Last Month
string month = DateTime.Now.ToString("MM");
int months = Int32.Parse(month);
int previousmonths = months - 1;
//Month in this Year
string year = DateTime.Now.ToString("yyyy");
int years = Int32.Parse(year);
int daysmonth = DateTime.DaysInMonth(years, previousmonths);
MessageBox.Show(daysmonth.ToString());
//Last Year
string year = DateTime.Now.ToString("yyyy");
int years = Int32.Parse(year);
int lastyears = years - 1;
int daysyear = DateTime.DaysInYear(lastyears);
MessageBox.Show(daysyear.ToString());
}
答案 0 :(得分:6)
据我记得,一年(闰年)总有365天(366天)。
您只需使用DateTime.IsLeapYear
:
public static int DaysInYear(int year)
{
return DateTime.IsLeapYear(year) ? 366 : 365;
}
但是,看看你的代码,我认为你过于复杂了 您不需要将DateTime格式化为字符串,然后再次解析它。
您的代码可以更清晰地重写:
// Days in previous Month
var monthAgo = DateTime.Now.AddMonths(-1);
int daysMonth = DateTime.DaysInMonth(monthAgo.Year, monthAgo.Month);
MessageBox.Show(daysMonth.ToString());
// Days in Previous Year
int daysYear = DaysInYear(DateTime.Now.Year - 1); // see my function above
MessageBox.Show(daysYear.ToString());
答案 1 :(得分:5)
上个月和去年有一些更优雅的方式。
var lastMonth = DateTime.Now.AddMonths(-1).Month;
var lastYear = DateTime.Now.AddYears(-1).Year;
从那里开始,获得一年中的天数就像耶尔达指出的那样简单:
var daysInLastYear = DateTime.IsLeapYear(yelastYear) ? 366 : 365;
答案 2 :(得分:0)
或者您可以使用此解决方案来帮助计算两天的计数
class sample2
{
internal static void Test()
{
var sampleTarget = new DateTime(2016, 4, 1);
var dayInYearForTarget = DayInYear(sampleTarget);
Console.WriteLine("Date: {0} => {1}", sampleTarget, dayInYearForTarget);
Console.ReadKey();
}
private static double DayInYear(DateTime target)
{
var date = target.Date;
var year = date.Year;
return date.Subtract(new DateTime(year, 1, 1)).TotalDays + 1;
}
}
答案 3 :(得分:0)
您还可以使用Calendar类。 使用示例:
var year = DateTime.UtcNow.AddYears(-1).Year;
var daysInLastYear = Calendar.ReadOnly(new GregorianCalendar()).GetDaysInYear(year);