Date 如何从给定的日期、星期几和月份获取所有可能的年份?
我想得到与特定日期、一天中的一周和一个月相关的一组年份。我有可能从这个模式中获得不同的年份。假设日期是15,月份是8月,一天中的一周是星期二,那么我如何找到有效的年份?这有一个公式吗?这能完全解决你的问题吗 其背后的理念是:Date 如何从给定的日期、星期几和月份获取所有可能的年份?,date,math,formula,Date,Math,Formula,我想得到与特定日期、一天中的一周和一个月相关的一组年份。我有可能从这个模式中获得不同的年份。假设日期是15,月份是8月,一天中的一周是星期二,那么我如何找到有效的年份?这有一个公式吗?这能完全解决你的问题吗 其背后的理念是: 从第0年的特定日期(8月15日)开始 如果日期在指定的工作日-->请将其添加到列表中 加1年 回到原点1 (直到达到您指定的最长日期) 以下是一个包含流的版本: int day = 29; Month month = Month.FEBRUARY; List<Lo
- 从第0年的特定日期(8月15日)开始
- 如果日期在指定的工作日-->请将其添加到列表中
- 加1年
- 回到原点1
int day = 29;
Month month = Month.FEBRUARY;
List<LocalDate> collect = IntStream.range(0, 2016).filter(year -> day <= LocalDate.of(year, month, 1).lengthOfMonth())
.mapToObj(year -> LocalDate.of(year, month, day)).filter(date -> date.getDayOfWeek() == DayOfWeek.TUESDAY)
.collect(Collectors.toList());
collect.forEach((year -> System.out.println(year)));
int-day=29;
月=月。二月;
List collect=IntStream.range(0,2016)。过滤器(年->天LocalDate.of(年、月、日))。过滤器(日期->日期.getDayOfWeek()==DayOfWeek.周二)
.collect(Collectors.toList());
collect.forEach((年->系统输出.println(年));
这里有一个简单的公式,你甚至可以在头脑中使用。你可以在这里找到更多信息:
这个问题与经典的DOMMDAY算法有关。
一种简单的计算方法是Kraitchik方法 Kraitchik方法-
w=d+m+c+y模式7,
其中w是一周中的一天(从周日的1开始向上计数,而不是高斯版本的0)
d、m、c和y是数字,具体取决于日、月和年,如下表所示:
Month 1 2 3 4 5 6 7 8 9 10 11 12
m 1 4 3 6 1 4 6 2 5 0 3 5
对于公历,以一年中的世纪为单位(例如,1986年为1900年,2014年为2000年)。[Century/100]mod 4:0 1 2 3
c:0531 对于儒略历,
[Century/100]mod 7:01 2 3 4 5 6
c:54326 最后,从该表中获得年份号(从1月或2月的日期中减去1):
年份y的最后两位数字
00 06 17 23 28 34 45 51 56 62 73 79 84 90 0 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 1 02 13 19 24 30 41 47 52 58 69 75 80 86 97 2 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98 3 09 15 20 26 37 43 48 54 65 71 76 82 93 99 4 04 10 21 27 32 38 49 55 60 66 77 83 88 94 5 05 11 16 22 33 39 44 50 61 67 72 78 89 95 6
就这样。您可以从wikipedia获得更多的背景详细信息,以下是Java 8中使用LocalDate解析器为您完成工作的一种方法。当我有一堆没有年份的日期,但不是当前年份就是下一个年份时,我使用了这个的修改版本
String dateString = "Mon Dec 23";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM d yyyy");
Integer startYear = 2000;
Integer endYear = 3000;
List<Integer> validYears = new ArrayList<>();
for(int i = startYear; i <= endYear; i++){
try{
LocalDate localDate = LocalDate.parse(dateString + " " + i, formatter);
validYears.add(localDate.getYear());
} catch (Exception e){
//Years that are not valid
}
}
for(Integer year: validYears){
System.out.println(year);
}
String dateString=“Mon-Dec 23”;
DateTimeFormatter formatter=模式的DateTimeFormatter.of(“E MMM d yyyy”);
整数startYear=2000;
整数endYear=3000;
List validears=new ArrayList();
对于(int i=startYear;i我无法阅读该表。可能移动应用程序中丢失了格式设置。如果没有,您能否详细说明?有关此主题的详细信息可在上获得。在您的特定情况下,您需要进行修改,因为您需要查找年份。可能还需要运行一个循环几个世纪。
Month 1 2 3 4 5 6 7 8 9 10 11 12
m 1 4 3 6 1 4 6 2 5 0 3 5
String dateString = "Mon Dec 23";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM d yyyy");
Integer startYear = 2000;
Integer endYear = 3000;
List<Integer> validYears = new ArrayList<>();
for(int i = startYear; i <= endYear; i++){
try{
LocalDate localDate = LocalDate.parse(dateString + " " + i, formatter);
validYears.add(localDate.getYear());
} catch (Exception e){
//Years that are not valid
}
}
for(Integer year: validYears){
System.out.println(year);
}