回答編集履歴

3

月数計算にTemporalUnit\(ChronoUnit\)\.betweenの例を追記

2016/06/25 09:54

投稿

argius
argius

スコア9390

test CHANGED
@@ -116,6 +116,12 @@
116
116
 
117
117
  // => 13
118
118
 
119
+
120
+
121
+ // これもほぼ同じ
122
+
123
+ // long monthCount = ChronoUnit.MONTHS.between(YearMonth.of(2015, 1), YearMonth.of(2016, 1)) + 1;
124
+
119
125
  ```
120
126
 
121
127
 

2

月数を算出する例を追記しました。

2016/06/25 09:54

投稿

argius
argius

スコア9390

test CHANGED
@@ -92,4 +92,36 @@
92
92
 
93
93
 
94
94
 
95
+ (追記2)
96
+
97
+
98
+
99
+ 上記の`13`(月数)を年月から算出するには下記のようにします。
100
+
101
+ (sipadan2003さんにご指摘いただきました。)
102
+
103
+ こうすると、`YearMonth.of(2015, 1)`が複数登場してしまうので、変数`startYM`などに代入して重複を解消してください。
104
+
105
+
106
+
107
+ ```lang-java
108
+
109
+ // import java.time.YearMonth;
110
+
111
+ // import java.time.temporal.ChronoUnit;
112
+
113
+
114
+
115
+ long monthCount = YearMonth.of(2015, 1).until(YearMonth.of(2016, 1), ChronoUnit.MONTHS) + 1;
116
+
117
+ // => 13
118
+
119
+ ```
120
+
121
+
122
+
123
+ ---
124
+
125
+
126
+
95
127
  Java7以前なら、素直にforループで書いた方が無難です。

1

無限ストリームを使った例を追記しました。

2016/06/25 04:04

投稿

argius
argius

スコア9390

test CHANGED
@@ -46,4 +46,50 @@
46
46
 
47
47
 
48
48
 
49
+ (追記)
50
+
51
+
52
+
53
+ 無限ストリームを使った方がよりスッキリする気がします。
54
+
55
+ (この辺、久しぶりに使ったのですぐに思いつきませんでした。)
56
+
57
+
58
+
59
+ ```lang-java
60
+
61
+ // import java.time.YearMonth;
62
+
63
+ // import java.time.format.DateTimeFormatter;
64
+
65
+ // import java.util.List;
66
+
67
+ // import java.util.stream.*;
68
+
69
+
70
+
71
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM");
72
+
73
+ List<String> monthList = Stream.iterate(YearMonth.of(2015, 1), x -> x.plusMonths(1))
74
+
75
+ .limit(13)
76
+
77
+ .map(dtf::format)
78
+
79
+ .collect(Collectors.toList());
80
+
81
+ // => [2015/01, 2015/02, 2015/03, 2015/04, 2015/05, 2015/06, 2015/07, 2015/08, 2015/09, 2015/10, 2015/11, 2015/12, 2016/01]
82
+
83
+ ```
84
+
85
+
86
+
87
+ 2015/01から1月ごと加算する年月の無限ストリームを生成して、13個に制限し、フォーマットで文字列に変換しています。
88
+
89
+
90
+
91
+ ---
92
+
93
+
94
+
49
95
  Java7以前なら、素直にforループで書いた方が無難です。