Cálculo de feriados móveis em Gambas3
Dica publicada em Linux / Introdução
Cálculo de feriados móveis em Gambas3
Os feriados móveis no Brasil são os seguintes:
Para calcular a data em que eles ocorrem, basta calcular o dia da Páscoa. Os demais são obtidos pela adição ou subtração de um determinado número de dias: subtraindo 47 dias do dia da Páscoa obtemos o dia correspondente à terça-feira de Carnaval; subtraindo 2 dias do dia da Páscoa obtemos a sexta-feira Santa e somando 60 dias ao dia da Páscoa obtemos o dia correspondente a Corpus Christi.
Para calcular o dia da Páscoa foi utilizado o algoritmo de Meeus/Jones/Butcher.
2. Escolher New Project.
3. Selecionar Graphical application e clicar em Next.
4. Selecionar a pasta onde vai ficar o programa e clicar Next.
5. Informar o nome do projeto (Project name), por exemplo: FeriadosMoveis
6. Informar um título para o projeto, por exemplo: Cálculo do dia da Páscoa.
7. Clicar em OK.
8. Na tela que vai surgir clicar dua vezes em FMain. Vai abrir uma área para desenho do formulário.
No formulário deverão ser incluídos:
Abaixo segue o código, composto de uma função (FeriadoMovel) e um evento Button1_Click.
A função implementa o algoritmo de Meeus/Jones/Butcher e o evento calcula as demais datas usando, para isso, a função interna DateAdd(data, gb.day, numero de dias), onde:
Pra utilizar a função DateAdd é necessário incorporar o componente gb,vb às propriedades do projeto.
Código fonte do aplicativo para cálculo de feriados móveis.
' Gambas class file
- Páscoa
- Sexta-feira Santa
- Carnaval
- Corpus Chisti
Para calcular a data em que eles ocorrem, basta calcular o dia da Páscoa. Os demais são obtidos pela adição ou subtração de um determinado número de dias: subtraindo 47 dias do dia da Páscoa obtemos o dia correspondente à terça-feira de Carnaval; subtraindo 2 dias do dia da Páscoa obtemos a sexta-feira Santa e somando 60 dias ao dia da Páscoa obtemos o dia correspondente a Corpus Christi.
Para calcular o dia da Páscoa foi utilizado o algoritmo de Meeus/Jones/Butcher.
Descrição do aplicativo
1. Entrar no Gambas3.2. Escolher New Project.
3. Selecionar Graphical application e clicar em Next.
4. Selecionar a pasta onde vai ficar o programa e clicar Next.
5. Informar o nome do projeto (Project name), por exemplo: FeriadosMoveis
6. Informar um título para o projeto, por exemplo: Cálculo do dia da Páscoa.
7. Clicar em OK.
8. Na tela que vai surgir clicar dua vezes em FMain. Vai abrir uma área para desenho do formulário.
No formulário deverão ser incluídos:
- 5 Labeks
- 5 TextBox: txtAno, txtCarna, txtSexta. txtPascoa e txtCorpus
- 1 Button: Button1
Abaixo segue o código, composto de uma função (FeriadoMovel) e um evento Button1_Click.
A função implementa o algoritmo de Meeus/Jones/Butcher e o evento calcula as demais datas usando, para isso, a função interna DateAdd(data, gb.day, numero de dias), onde:
- data -> data base, no caso o dia da Páscoa;
- gb.day -> constante interna que especifica que o cálculo será feto utilizando quantidade de dias;
- número de dias: uma quantidade positiva ou negativa de dias.
Pra utilizar a função DateAdd é necessário incorporar o componente gb,vb às propriedades do projeto.
Código fonte do aplicativo para cálculo de feriados móveis.
' Gambas class file
Public Function FeriadoMovel(Ano As Integer) As Date
Dim a, b, c, d, e, f, g, h, i, k, l, m, mes, dia As Integer
Dim Pascoa As Date
a = Ano Mod 19
b = Int(Ano / 100)
c = Ano Mod 100
d = Int(b / 4)
e = b Mod 4
f = Int((b + 8) / 25)
g = Int((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) Mod 30
i = Int(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = Int((a + 11 * h + 22 * l) / 451)
mes = Int((h + l - 7 * m + 114) / 31)
dia = ((h + l - 7 * m + 114) Mod 31) + 1
Pascoa = CDate(mes & "/" & dia & "/" & Ano)
Return Pascoa
End Function
Public Sub Button1_Click()
Dim ano As Integer
Dim pascoa As Date
Dim sexta As Date
Dim carna As Date
Dim corpus As Date
txtAno.Select()
ano = CInt(txtAno.Text)
pascoa = FeriadoMovel(ano)
sexta = DateAdd(pascoa, gb.day, -2)
carna = DateAdd(pascoa, gb.day, -47)
corpus = DateAdd(pascoa, gb.day, 60)
txtPascoa.Text = Format$(pascoa, "dd/mm/yyyy")
txtCarna.Text = Format$(carna, "dd/mm/yyyy")
txtSexta.Text = Format$(sexta, "dd/mm/yyyy")
txtCorpus.Text = Format$(corpus, "dd/mm/yyyy")
End