Classe Calendar
No Java o tempo é representado em milissegundos que são contados a partir 01/01/1970 (Unix epoch), assim valores negativos representam datas anteriores a esta.
Existem outras classes de manipulação de data, como Date e DateFormat. A classe Date retorna a data de acordo com o sistema instalado. A maioria de seus métodos não são mais usados por não oferecer formatos de data usados em outras culturas. A classe DateFormat é uma classe de formatação de datas e horários que tanto formata como analisa.
- A Classe Calendar
A classe Calendar faz parte do pacote java.util. É uma classe abstrata que expõe métodos tanto para conversão de períodos de tempo para os campos de um calendário comum, como ano, mês e outros, e também
para manipulação de campos do calendário como um dia da próxima semana.
Sendo uma classe abstrata, ela não pode ser instanciada, portanto é
necessário utilizar um método estático. Seu principal método, getInstance(), retorna um calendário Gregoriano com valor inicial que reflete a data atual do sistema.
Calendar agora = Calendar.getInstance();
The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on, and for manipulating the calendar fields, such as getting the date of the next week. An instant in time can be represented by a millisecond value that is an offset from the Epoch, January 1, 1970 00:00:00.000 GMT (Gregorian).
The class also provides additional fields and methods for implementing a concrete calendar system outside the package. Those fields and methods are defined as protected.
Like other locale-sensitive classes, Calendar provides a class method, getInstance, for getting a generally useful object of this type. Calendar's getInstance method returns a Calendar object whose calendar fields have been initialized with the current date and time.
-- java docs --
- Métodos get e set para a classe Calendar
A classe Calendar fornece métodos GET e SET para alguns de seus campos. Com o método GET é possivel alterar qualquer campo do calendário e o método SET retorna a informação de qualquer campo do calendário.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2010); // alterando o ano para 2010
calendar.get(Calendar.YEAR); // recuperando seu valor
Alguns dos campos que podem ser manipulados:
- Calendar.YEAR
- Calendar.MONTH
- Calendar.DAY_OF_MONTH
- Calendar.HOUR
- Calendar.MINUTE
- Calendar.SECOND
Quando o valor é alterado pelo método set(), ele altera o campo do calendário sem alterar o tempo em milissegundos. Este apenas será computado quando um método como get() for chamado. Assim se for alterado o campo mês do calendário, da data 31/08/2014, por exemplo, para Setembro, temporariamente a data será 31/09/2014 e quando um get() for chamado ele vai retornar 01/10/2014.
Existem ainda duas outras maneiras de manipular os campos, que são o uso dos métodos add() e roll(). O método add() vai forçar a atualização do tempo em milissegundos do calendário imediatamente. Já o método roll() dispara inicialmente um método Calendar.complete()
que normaliza os campos do calendário. Se a leniência for falsa e
existir algum campo fora do seu intervalo vai ocorrer uma exceção. O
método roll() adiciona
valores ao campo sem alterar os valores dos campos maiores. Como
exemplo se adicionarmos 8 meses a data de 31/08/2014 ela vai ser
ajustada para 30/04/2014. Como Abril não tem 31 dias o valor provável
mais próximo é usado.
- Leniência
Quando a classe Calendar é leniente, ela aceita uma gama de entradas muito maior do que ela produz. Por
exemplo, para um mês igual a janeiro e um dia do mês igual a 32,
janeiro não tem 32 dias, ele devolve uma data que corresponde a 1º de
fevereiro. Se a classe não é leniente ela devolve uma exceção se a
entrada estiver fora da faixa de valores do campo. O valor inicial padrão é leniente, mas pode-se ajustar para não leniente da seguinte forma:
Calendar calendario = Calendar.getInstance();
calendario.setLenient(false);
- Exemplos práticos do uso da classe Calendar e seus principais métodos
- Retornado a data atual:
Calendar calendario = Calendar.getInstance();
output: Wed May 07 12:00:00 BRT 2014
- Retornando o ano, mês e dia a partir de uma data:
Lembre-se que nos valores inteiros que representam os meses, 0 indica Janeiro e 11 Dezembro.
output: 2014
System.out.println(calendario.get(Calendar.MONTH));
output: 05
System.out.println(calendario.get(Calendar.DAY_OF_MONTH));
output: 07
- Somando um dia à data atual e retornado a nova data:
calendario.add(calendario.DAY_OF_MONTH, 1);
output: Thu May 08 12:00:00 BRT 2014
- Alterando um mês do calendário:
System.out.println(calendario.getTime());
calendario.set(calendario.MONTH, Calendar.DECEMBER);
output: Wed May 07 12:00:00 BRT 2014
Sun Dec 07 12:00:00 BRST 2014
Sun Dec 07 12:00:00 BRST 2014
- Subtraindo um ano da data atual:
calendario.add(calendario.YEAR, -1);
output: Tue May 07 12:00:00 BRT 2013
- Retornando a data correspondente a um epoch:
long data_Em_milissegundos = 1234567890;
calendario.setTimeInMillis(data_Em_milissegundos);
output: Thu Jan 15 03:56:07 BRT 1970
- Retornando uma String do dia da semana em português:
São
passados 3 parâmetros: campo do calendário, estilo da formatação que
pode ser SHORT, LONG ou ALL_STYLES e local. Para usar em inglês, por
exemplo, Locale.ENGLISH ou o valor local usando Locale.getDefault().
Calendar.LONG, Locale.getDefault()));
output: Quarta-feira
- Uso do método roll() adicionando meses à data atual
System.out.println(calendario.getTime());
System.out.println(calendario.getTime());
output: Fri May 16 17:00:00 BRT 2014
Sat Aug 16 17:00:00 BRT 2014
Sat Aug 16 17:00:00 BRT 2014
- Principais métodos
getDisplayName - retorna uma String que representa um campo do calendário.
getTime() - retorna a data do calendário.
- Resolução dos campos do calendário
Quando os dados são passados para o calendário, podem existem valores insuficientes
ou inconsistentes, como informar a data Quarta-feira 15 de Dezembro de
2011 quando este dia na realidade se refere a uma Quinta-feira. Ainda
assim a classe vai passar o valor e para isso vai priorizar a entrada de
dados de acordo com a sua ordem de entrada.
- Formatando as saídas
Quando é criada uma instância da classe Calendar, a data retornada vem no seguinte formato:
Calendar calendario = Calendar.getInstance();
System.out.println(calendario.getTime());
output: Mon Apr 28 17:58:23 BRT 2014
Para formatar a saída para o padrão brasileiro, por exemplo, dia/mês/ano, é preciso fazer uso de uma outra classe chamada SimpleDateFormat, no pacote java.text.SimpleDateFormat.
output: 28/04/2014
- ExercíciosTreine um pouco do que você aprendeu hoje fazendo os exercícios abaixo. Não deixe de testar os exemplos desenvolvidos acima. Mude seus valores e observe os resultados.
- Qual a função dos métodos get e set na classe Calendar?
- Qual a função da leniência?
- No código abaixo, qual saída no console será produzida:
Calendar calendar = new Calendar();
System.out.println(calendar.getInstance().getTime());
System.out.println(calendar.getInstance().getTime());
- Escreva um código que retorne o dia da semana correspondente a data de 05 de Maio de 2014:
- Adicione um dia ao epoch 1234567890 e exiba a data resultante.
- Vídeos de interesse:
- Links de interesse:
Nenhum comentário:
Postar um comentário