繁体   English   中英

日历给出了第1年的意外结果

[英]Calendar giving unexpected results for year 1

我试图在Java 7中进行这种代码 - 高尔夫挑战 。只是对于任何不知道的人: 是以尽可能少的字节完成某项任务。 显然,Java不是一种合适的编程语言,特别是像Jelly这样的语言; 05AB1E; Pyth; 同样以1-15个字节完成任务,在Java中为75-300,但我只是为了好玩。

这是我目前的Java 7答案。 仅供参考,我也会在这里复制:

import java.util.*;String c(int y){String r="";Calendar c=Calendar.getInstance();c.set(1,y);c.set(2,0);for(int i=0;i++<11;c.add(2,1)){c.set(5,c.getActualMaximum(5));if(c.get(7)==2)r+=i+" ";}return r;}

import java.util.*;
class M{
  static String c(int year){
    String r = "";
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.MONTH, 0);
    for(int i = 0; i++ < 11; calendar.add(Calendar.MONTH, 1)){
      calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
      if(calendar.get(Calendar.DAY_OF_WEEK) == 2){
        r += i+" ";
      }
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(1));
    System.out.println(c(297));
    System.out.println(c(1776));
    System.out.println(c(2000));
    System.out.println(c(2016));
    System.out.println(c(3385));
  }
}

哪个输出所有1个索引月份,其中月份的最后一天是星期一:

1 2 10 **
5 
9 
1 7 
2 10 
1 2 10

您在将我的结果与链接挑战中的结果进行比较时可能会注意到,第1年的结果不正确。
有谁知道为什么? 最初我认为Calendar.getInstance()默认的日历不正确,因此我将其更改为挑战中指定的new GregorianCalendar() 但我意识到这已经是默认日历了。

为什么第1年的结果不正确?

不幸的是, GregorianCalendar名字很糟糕。 它实际上是“Julian / Gregorian日历,它们之间有切换。”

幸运的是,您可以通过将切换设置为开始时间来将其用作纯公历:

GregorianCalendar calendar = new GregorianCalendar();
calendar.setGregorianChange(new Date(Long.MIN_VALUE));

在这一点上,使用当前代码,你只得到“4”的答案 - 由于一个错误的错误而没有拿到12 ......你想要< 12而不是< 11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM