Estou fazendo um calendario (gregorian calendar), em que necessito destacar os feriados.
Quanto ao feriado da páscoa (que é o referencial para os demais), está feito.
int X=24;
int Y=5;
int a = y % 19;
int b= y % 4;
int c = y % 7;
int d = (19 * a + X) % 30;
int e = (2 * b + 4 * c + 6 * d + Y) % 7;
if (d + e > 9) {
dia = d + e - 9;
pascoa = 4;
}
if (d + e <= 9) {
dia = d + e + 22;
pascoa = 3;
}
if (m==pascoa){
if (i==dia) {
day.setForeground(Color.red);
day.setToolTipText("Páscoa");
}
}
if (m==pascoa){
if (i == dia -2) {
day.setForeground(Color.red);
day.setToolTipText("Sexta-Feira da Paixão");
}
}
O problema é como fazer com que, por exemplo, o carnaval de acordo com minha fórmula, será exatamente 47 dias antes da
páscoa.
Como faço para diminuir estes dias?
A pascoa deste ano foi 8/04, como diminuir 47 dias?
8 - 47 = numero negativo.
sem falar que o mes tem 31 dias… etc.
Então nel, eu estou trabalhando só com inteiros não com datas.
private void updateDayGrid (int m,JPanel p) {
p.removeAll();
int y = 0;
int dia = 0;
int pascoa = 0;
try {
y = Integer.parseInt(labelano.getText());
m = mes;
}
catch(Exception e){}
GregorianCalendar temp = new GregorianCalendar(y, m-1, 1);
temp.setLenient(false);
int offset = 0;
switch(temp.get(GregorianCalendar.DAY_OF_WEEK)) {
case GregorianCalendar.SUNDAY : offset = 0; break;
case GregorianCalendar.MONDAY : offset = 1; break;
case GregorianCalendar.TUESDAY : offset = 2; break;
case GregorianCalendar.WEDNESDAY : offset = 3; break;
case GregorianCalendar.THURSDAY : offset = 4; break;
case GregorianCalendar.FRIDAY : offset = 5; break;
case GregorianCalendar.SATURDAY : offset = 6; break;
}
String daynames[]={"D","S","T","Q","Q","S","S"};
JLabel l[]=new JLabel[7];
for(int i=0;i<7;i++){
l[i]=new JLabel(daynames[i], JLabel.CENTER);
p.add(l[i]);
l[0].setForeground(Color.red);
l[i].setForeground(Color.black);
l[i].setFont(new Font("", Font.ITALIC, 13));
}
for (int i=1; i<=offset; i++) {
p.add(new JLabel(""));
}
JButton day;
for (int i=1; i<=getLastDay(); i++) {
p.add(day = new JButton(String.valueOf(i)));
day.setFont(new Font("SansSerif", Font.ITALIC, 12));
day.setMargin(new java.awt.Insets(1,2,1,2));
day.addActionListener(this);
day.setForeground(Color.blue);
// p.setBackground(Color.WHITE);
// mostra dia atual
if ( i == calendario.get(Calendar.DATE) &&
m-1 == calendario.get(Calendar.MONTH) &&
y == calendario.get(Calendar.YEAR)) {
day.setForeground(Color.green);
day.setToolTipText("Hoje");
}
// mostra feriado do dia do trabalhador
if (m == 5 && i == 1) {
day.setForeground(Color.red);
day.setToolTipText("Dia do Trabalho");
}
// mostra dia da independencia
if (m == 9 && i == 7) {
day.setForeground(Color.red);
day.setToolTipText("Independência");
}
// mostra dia de Nossa Senhora Aparecida
if (m == 10 && i == 12) {
day.setForeground(Color.red);
day.setToolTipText("Nossa Senhora Aparecida");
}
// mostra dia de Finados
if (m == 11 && i == 2) {
day.setForeground(Color.red);
day.setToolTipText("Finados");
}
// mostra dia da Proclamação da República
if (m == 11 && i == 15) {
day.setForeground(Color.red);
day.setToolTipText("Proclamação da República");
}
// mostra dia do Natal
if (m == 12 && i == 25) {
day.setForeground(Color.red);
day.setToolTipText("Natal");
}
// mostra dia do Ano Novo
if (m == 1 && i == 1) {
day.setForeground(Color.red);
day.setToolTipText("Ano Novo");
}
// mostra feriado de Tiradentes
if (m == 4 && i == 21) {
day.setForeground(Color.red);
day.setToolTipText("Tiradentes");
}
// mostra feriado de Páscoa
int X=24;
int Y=5;
int a = y % 19;
int b= y % 4;
int c = y % 7;
int d = (19 * a + X) % 30;
int e = (2 * b + 4 * c + 6 * d + Y) % 7;
if (d + e > 9) {
dia = d + e - 9;
pascoa = 4;
}
if (d + e <= 9) {
dia = d + e + 22;
pascoa = 3;
}
if (m==pascoa){
if (i==dia) {
day.setForeground(Color.red);
day.setToolTipText("Páscoa");
}
}
if (m==pascoa){
if (i == dia -2) {
day.setForeground(Color.red);
day.setToolTipText("Sexta-Feira da Paixão");
}
}
for (int i1=0; i1<JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT; i1++) {
day.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CadastroEmpresa l = new CadastroEmpresa();
l.setVisible(true);
l.setSize(new Dimension(800,500));
}
});
}
}
for (int i=(offset+getLastDay()+1); i<=42; i++) {
p.add(new JLabel(""));
}
repaint();
}
eu imaginei que você pudesse fazer com Calendar, não vejo o problema, se quiser saber o dia da páscoa, é só fazer assim:
Calendar carnaval = Calendar.getInstance();
carnaval.setTime(dataDaPascoa);
carnaval.add(Calendar.DAY_OF_MONTH, -47);
int diaDoCarnaval = carnaval.get(Calendar.DAY_OF_MONTH);
int mesDoCarnaval = carnaval.get(Calendar.MONTH); // Lembrando que os meses vão de 0 a 11, e não de 1 a 12
Desculpe se não entendi, mas meu ano(y), mes(m) e
dia(i) são int, certo!?
O calculo para a páscoa está pronto e retornando também um int e é variável dependendo do ano.
carnaval.setTime(dataDaPascoa), necessita ser Date (o qual eu não estou recebendo em nenhum lugar) e também não posso passar fixo pois cada ano é diferente.
acredito que este método só da para usar quando a data é fixa, ou não?
mas se você tem o ano, mes e dia, consegue setar tudo no seu Calendar.Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, day); // day = sua variável de dia
calendar.set(Calendar.MONTH, month-1); // month = sua variável de mes
calendar.set(Calendar.YEAR, year); // year = sua variável de dia
[quote=Allexb10]Desculpe se não entendi, mas meu ano(y), mes(m) e
dia(i) são int, certo!?
O calculo para a páscoa está pronto e retornando também um int e é variável dependendo do ano.
carnaval.setTime(dataDaPascoa), necessita ser Date (o qual eu não estou recebendo em nenhum lugar) e também não posso passar fixo pois cada ano é diferente.
acredito que este método só da para usar quando a data é fixa, ou não?
[/quote]
É claro que não. Veja uma ideia, vamos supor que esse ano (não me recordo, só péssimo com feriados) a páscoa foi em 20/04/2012, ok ?
Então tu tem em inteiro, dia 20, mês 04 e ano 2012, certo. Vamos transformar isso em uma String:
[code]StringBuffer sb = new StringBuffer();
sb.append(dia);
sb.append("/");
sb.append(mes);
sb.append("/");
sb.append(ano);
java.util.Date dataDaPascoa = new SimpleDateFormat(“dd/MM/yyyy”).parse(sb.toString());
Calendar carnaval = Calendar.getInstance();
carnaval.setTime(dataDaPascoa);
carnaval.add(Calendar.DAY_OF_MONTH, -47);
int diaDoCarnaval = carnaval.get(Calendar.DAY_OF_MONTH);
int mesDoCarnaval = carnaval.get(Calendar.MONTH); // Lembrando que os meses vão de 0 a 11, e não de 1 a 12 [/code]