2017-07-25 69 views
1

我有label1 label2和button1我按了button1,label1文本會根據上個月的總天數(可以說'31'天)和基於最後一年的總天數改變說「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

假設你已經查過它是如何完成的,你的代碼看起來很奇怪 - https://www.bing.com/search?q = c%23 + days + in + year ... –

回答

5

據我記憶,在年(閏年)總是有365(366天)。

您可以簡單地使用DateTime.IsLeapYear

public static int DaysInYear(int year) 
{ 
    return DateTime.IsLeapYear(year) ? 366 : 365; 
} 

然而,看着你的代碼,我認爲你過於複雜了。
你不需要格式化你的日期時間作爲字符串,然後再解析它。

你的代碼可以在一個更清潔的方式來改寫:

// 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()); 
+0

考慮使用NodaTime如果你需要更多的準確度 –

+0

NodaTime確實很棒,但不知道在計數天數時它是否更準確:) – AlexDrenea

5

有一些更優雅的方式去上個月和去年。

var lastMonth = DateTime.Now.AddMonths(-1).Month; 
var lastYear = DateTime.Now.AddYears(-1).Year; 

從那裏,獲得當年天數是簡單的像Yeldar指出:

var daysInLastYear = DateTime.IsLeapYear(yelastYear) ? 366 : 365; 
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; 
    } 
}