プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

今月の経過した日にち・残りの日にちリストを1行で作成する

・今月の経過した日にちの列挙

new List<int>(Enumerable.Range(1, DateTime.Today.Day))

・今月の残りの日にちの列挙

new List<int>(Enumerable.Range(DateTime.Today.Day + 1,
                   DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month) - DateTime.Today.Day))

System.Linq.Enumerable.Rangeメソッドで整数を列挙してやります。
第一引数が始点の数字、第二引数が列挙個数となっています。
始点を1日にして、列挙数に今日の日付を入れてやれば、月初めから今日まで経過した日にちを列挙できます。
ListはRangeメソッドの戻り値であるIEnumerable型コレクションを初期値としてコンストラクタに突っ込めるので、これで経過日にちを全部列挙するリストができあがります。

残り日にちの場合、明日の日付を始点として、月末日から今日までの日数を引いた分だけ列挙します。
DayInMonthで指定年月の日数が出せるのでこれで月末日を出します。

・サンプルコード

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    public class Sample
    {
        public static void Main()
        {
            Console.WriteLine("今日:" + DateTime.Now + Environment.NewLine);

            Console.WriteLine("今月の経過した日にち");
                new List<int>(Enumerable.Range(1, DateTime.Today.Day))
                .ForEach(i => Console.WriteLine(i));

            Console.WriteLine();

            Console.WriteLine("今月の残りの日にち");
            new List<int>(Enumerable.Range(DateTime.Today.Day + 1,
                   DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month) - DateTime.Today.Day))
                   .ForEach(i => Console.WriteLine(i));

            Console.ReadLine();
        }
    }
}

・実行結果
今日:2015/07/17 10:07:27

今月の経過した日にち
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

今月の残りの日にち
18
19
20
21
22
23
24
25
26
27
28
29
30
31