month - java calendar day of week number
Calendario dando resultados inesperados para el año 1 (1)
Desafortunadamente, GregorianCalendar
está mal nombrado. En realidad es el "calendario juliano / gregoriano, con un cambio entre ellos".
Afortunadamente, puedes usarlo para actuar como un calendario gregoriano puro configurando ese cambio para que sea al comienzo del tiempo:
GregorianCalendar calendar = new GregorianCalendar();
calendar.setGregorianChange(new Date(Long.MIN_VALUE));
En ese momento, con tu código actual, obtienes una respuesta de solo "4" - no está recogiendo 12 debido a un error "uno por uno" ... quieres < 12
lugar de < 11
.
Traté de hacer este desafío de código de golf en Java 7. Solo para cualquiera que no lo sepa: code-golf es completar una determinada tarea en el menor número de bytes posible. Obviamente, Java no es un lenguaje de programación adecuado para hacer esto, especialmente con lenguajes como Jelly; 05AB1E; Pyth; y por igual quienes completan tareas en 1-15 bytes que serán 75-300 en Java, pero solo lo hago por diversión.
Aquí está mi respuesta actual de Java 7. Solo como referencia, también lo copiaré aquí:
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));
}
}
Que produce todos los meses de 1 índice cuyo último día del mes es un lunes:
1 2 10 **
5
9
1 7
2 10
1 2 10
Como puede observar al comparar mis resultados con los resultados en el desafío vinculado, los resultados para el año 1 son incorrectos.
¿Alguien sabe por qué? Originalmente pensé que Calendar.getInstance()
tenía el calendario incorrecto como predeterminado, así que lo cambié a un new GregorianCalendar()
como se especifica en el desafío. Pero me di cuenta de que este es el calendario predeterminado.
¿Por qué hay resultados incorrectos para el año 1?