1 import java.text.SimpleDateFormat;
2 import java.util.ArrayList;
3 import java.util.Calendar;
4 import java.util.Date;
5 import java.util.List;
6 import java.util.stream.Collectors;
7
8 /**
9 * JDK7
10 * {输入年、生成每月的每天}
11 * creat on : 2018-12-17
12 *
13 * @author db
14 */
15 public class creatDate_JDK7 {
16
17 /**
18 * 时间格式 yyyy-MM-dd
19 */
20 private static final String S_DEFAULT_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
21 /**
22 * 时间
23 */
24 private static final int S_INTERVAL_DAY = 24 * 60 * 60 * 1000;
25
26 //测试方法
27 public static void main(String[] args) throws Exception {
28 List<Date> dates = sectionDate(2018);
29 dates.stream().map(date -> {
30 return dateFormat(date);
31 }).collect(Collectors.toList()).forEach(System.out::println);
32 System.out.println(dates.size());
33 }
34
35 /**
36 * 创建一年的日期
37 * {
38 * 1:指定初始月份和结束月份,通过‘dateConversion’获取期望生成年分的第一个月的第一天,与最后一个月的最后一天.
39 * 2:最后一天减去第一天、获取两天中间所差的毫秒数。
40 * 3:利用毫秒数除以一天的时间(S_INTERVAL_DAY = 24 * 60 * 60 * 1000)得出天数
41 * 4:在list中先添加结束时间、以天数为终止条件、循环添加时间(在先添加的结束时间的基础上减一)
42 * }
43 *
44 * @param year 期望年份
45 * @throws Exception 异常
46 */
47 private static List<Date> sectionDate(final int year) throws Exception {
48 //1:指定初始月份和结束月份,通过‘dateConversion’获取期望生成年分的第一个月的第一天,与最后一个月的最后一天.
49 int t_monthStart = typeMonth.Jan.getValue();
50 int t_monthEnd = typeMonth.Dec.getValue();
51 Date t_start = dateConversion(year, t_monthStart, typeMonth.firstDay);
52 Date t_end = dateConversion(year, t_monthEnd, typeMonth.lasttDay);
53 //2:最后一天减去第一天、获取两天中间所差的毫秒数。
54 //3:利用毫秒数除以一天的时间(S_INTERVAL_DAY = 24 * 60 * 60 * 1000)得出天数
55 Long step = (t_end.getTime() - t_start.getTime()) / (S_INTERVAL_DAY);
56 //4:在list中先添加结束时间、以天数为终止条件、循环添加时间(在先添加的结束时间的基础上减一)
57 List<Date> dateList = new ArrayList<>();
58 dateList.add(t_end);
59 for (int i = 1; i <= step; i++) {
60 dateList.add(new Date(dateList.get(i - 1).getTime() - (S_INTERVAL_DAY)));
61 }
62 return dateList;
63 }
64
65 /**
66 * 获取期望日期
67 *
68 * @param month 月
69 * @param year 年
70 * @param flag 判断条件
71 * @return 期望日期
72 */
73 private static Date dateConversion(final int year, final int month, final typeMonth flag) throws Exception {
74 Calendar cal = Calendar.getInstance();
75 cal.set(Calendar.YEAR, year);
76 cal.set(Calendar.MONTH, month - 1);
77 switch (flag.getValue()) {
78 case 0:
79 cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE));
80 break;
81 case 99:
82 cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
83 break;
84 default:
85 throw new Exception("Refer to 'First Day' and 'Last Day' in the 'AllMoth' enumeration method.");
86 }
87 return cal.getTime();
88 }
89
90 /**
91 * 格式化时间
92 *
93 * @param date 需要格式化的时间
94 * @return String类型的格式化时间(YYYY_MM_DD)
95 */
96 private static String dateFormat(final Date date) {
97 return new SimpleDateFormat(S_DEFAULT_FORMAT_YYYY_MM_DD).format(date);
98 }
99
100 /**
101 * 枚举月份与标识
102 */
103 enum typeMonth {
104 Jan(1), Feb(2), Mar(3), Apr(4), May(5), June(6), July(7), Aug(8), Sept(9), Oct(10), Nov(11), Dec(12), firstDay(
105 0), lasttDay(99);
106
107 int value;
108
109 typeMonth(int value) {
110 this.value = value;
111 }
112
113 public int getValue() {
114 return value;
115 }
116 }
117
118 }
1 import java.time.LocalDate;
2 import java.time.temporal.ChronoUnit;
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.stream.Stream;
6
7 /**
8 * JDK8
9 * {输入年、生成每月的每天}
10 * @author DB
11 */
12
13 public class creatDate_JDK8 {
14 public static void main(String[] args) {
15 List list = creatYearDate(2018);
16 list.forEach(System.out::println);
17 System.out.println(list.size());
18 }
19 public static List creatYearDate(int year) {
20 LocalDate now = LocalDate.now().withYear(year);
21 LocalDate start = now.withDayOfYear(1);
22 LocalDate end = now.withDayOfYear(now.lengthOfYear());
23 List<Object> list = new ArrayList<>();
24 long between = ChronoUnit.DAYS.between(start, end);
25 Stream.iterate(start, d -> {
26 return d.plusDays(1);
27 }).limit(between + 1).forEach(f -> {
28 list.add(f.toString());
29 });
30 return list;
31 }
32
33 }
两个版本:1.7And1.8
区别在1.8用的新特性