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用的新特性
浙公网安备 33010602011771号