O Java fornece a classe de data no pacote java.util, que encapsula a data e hora atuais.
A classe de data suporta dois construtores. O primeiro construtor inicializa a data e a hora atuais do objeto.
Data( )
O construtor a seguir recebe um parâmetro igual ao número de milissegundos desde a meia -noite de 1º de janeiro de 1970
Data (longa milisec)
Uma vez que houver um objeto de data disponível, você pode chamar qualquer um dos seguintes métodos suportados para usar o tempo:
| Sn | Métodos e descrições |
|---|---|
| 1 | booleano após (data de data) Retorne true se o objeto Data da chamada contiver ou posterior à data especificada, caso contrário, retorne false. |
| 2 | booleano antes (data) Retorne true se o objeto Data da chamada contiver ou antes da data especificada até a data, caso contrário, retorne false. |
| 3 | Clone de objeto () Repita a chamada para o objeto Data. |
| 4 | int compare (data) Compare o valor do objeto de chamada com a data. Se esses dois valores forem iguais, retorne 0. Retorne um valor negativo se o objeto de chamada for anterior à data. Retorna um valor positivo se o objeto de chamada for posterior à data. |
| 5 | int compare (objeto obj) Use a mesma operação compareto (data) se o OBJ for uma data de classe. Caso contrário, ele lança uma ClassCastException. |
| 6 | BOOLEANOS Iguals (data do objeto) Retorne true se o objeto Data da chamada contiver a mesma data e data especificada, caso contrário, retorne false. |
| 7 | long gettime () Retorna o número de milissegundos que se passaram desde 1º de janeiro de 1970. |
| 8 | int hashcode () Retorna o código de hash do objeto de chamada. |
| 9 | Void Settime (longo tempo) Define o tempo especificado, que representa o tempo decorrido em milissegundos a partir da meia -noite de 1º de janeiro de 1970. |
| 10 | String ToString () Ligue para o objeto Data para converter em uma string e retornar o resultado. |
importar java.util.date; classe pública datedemo {public static void main (string args []) {// instancia uma data date objeto data = new date (); // Exibir hora e data usando tostring () system.out.println (date.toString ()); }}Isso produzirá os seguintes resultados:
Seg 04 de maio 09:51:52 CDT 2009
Comparação de data
Existem três maneiras de comparar duas datas:
Datas de formato usando simledateformat
SimpledateFormat é uma classe de concreto usada localmente para formatar e converter datas. SimpleDateFormat permite que a seleção de esquemas definidos pelo usuário até o formato de data e hora. Por exemplo:
importar java.Util. SimpledateFormat ft = new SimpleDateFormat ("eaayyy.mm.dd 'em' hh: mm: ss a zzz"); System.out.println ("Data atual:" + ft.Format (dnow)); }}Isso produzirá os seguintes resultados:
Data atual: Sun 2004.07.18 às 16:14:09 PDT
Código de formato de formato de data simples
Para especificar um formato de tempo, use uma sequência de padrão de tempo. Nesse padrão, todas as letras ASCII são retidas como letras padrão, que são definidas da seguinte forma:
| personagem | descrever | exemplo |
|---|---|---|
| G | Indicador de tempo | ANÚNCIO |
| y | Anos de quatro dígitos | 2001 |
| M | Mês do meio do ano | Julho ou 07 |
| d | Data do mês | 10 |
| h | Tempo AM/PM (1 ~ 12) | 12 |
| H | Hora do dia (0 ~ 23) | vinte e dois |
| m | Minutos de horas | 30 |
| s | Segundos de minutos | 55 |
| S | milissegundo | 234 |
| E | O dia da semana | Terça-feira |
| D | O dia do ano | 360 |
| F | O dia da semana do mês | 2 (Segunda quarta -feira em julho) |
| c | Semana do meio do ano | 40 |
| C | Semana do mês | 1 |
| um | Marcadores AM/PM | PM |
| k | Hora no dia (1 ~ 24) | vinte e quatro |
| K | Horas AM/PM (0 ~ 11) | 10 |
| z | Fuso horário | Tempo padrão oriental |
| ' | Deixe o texto | Delimitador |
| " | Citações únicas | ` |
importar java.util.date; classe pública datedemo {public static void main (string args []) {// instancia uma data date objeto data = new date (); // Exibir hora e data usando tostring () string str = string.format ("data atual/hora: %tc", data); System.out.printf (str); }}Isso produzirá os seguintes resultados:
Data/hora atual: Sáb 15 de dezembro 16:37:57 MST 2012
É uma prática ruim fornecer múltiplas formaturas de datas. Uma sequência de formato pode indicar o índice dos parâmetros a serem formatados.
O índice deve ser seguido imediatamente por % e deve ser encerrado por $. Por exemplo:
importar java.util.date; classe pública datedemo {public static void main (string args []) {// instancia uma data date objeto data = new date (); // Exibir hora e data usando o tostring () System.out.printf (" %1 $ s %2 $ tb %2 $ td, %2 $ ty", "Data de vencimento:", data); }}Isso produzirá os seguintes resultados:
Data de vencimento: 09 de fevereiro de 2004
Como alternativa, o sinalizador <pode ser usado. Isso significa os mesmos parâmetros e deve ser usado novamente de acordo com as especificações do formato acima. Por exemplo:
importar java.util.date; classe pública datedemo {public static void main (string args []) {// instancia uma data date objeto data = new date (); // Exibir o System.out.printf (" %s %tb %<te, %<ty", "data de vencimento:", data); }}Isso produzirá os seguintes resultados:
Data de vencimento: 09 de fevereiro de 2004
Personagens de conversão de data e hora
| personagem | descrever | exemplo |
|---|---|---|
| c | Data e hora completas | Seg 04 de maio 09:51:52 CDT 2009 |
| F | ISO 8601 Data | 2004-02-09 |
| D | Hora do formato dos EUA (mês/dia/ano) | 02/09/2004 |
| T | Sistema 24 vezes | 18:05:19 |
| r | 12 vezes sistema | 18:05:19 |
| R | Sistema 24 vezes, sem segundos | 18:05 |
| Y | Ano de quatro dígitos (usando a primeira coluna da primeira linha Zero) | 2004 |
| y | Os dois últimos dígitos do ano (usando a primeira coluna da primeira linha zero) | 04 |
| C | Os dois primeiros dígitos do ano (usando a primeira coluna da primeira linha Zero) | 20 |
| B | Nome do mês inteiro | Fevereiro |
| b | Nome do mês da abreviação | Fevereiro |
| m | Meses de dois dígitos (usando a primeira coluna da primeira linha zero) | 02 |
| d | Data de dois dígitos (usando a primeira coluna da primeira linha zero) | 03 |
| e | Data de dois dígitos (sem coluna para a frente zero) | 9 |
| UM | Nome da semana inteira | Segunda-feira |
| um | Abreviação do nome da semana | seg |
| j | Dias de três dígitos no meio do ano (usando a primeira coluna da primeira linha zero) | 069 |
| H | Horas de dois dígitos (usando a primeira coluna da primeira linha Zero), entre 00 e 23 | 18 |
| k | Horas de dois dígitos (sem coluna de zero para a frente), entre 0 e 23 | 18 |
| EU | Horas de dois dígitos (usando a primeira coluna da primeira linha zero), entre 01 e 12 | 06 |
| l | Horas de dois dígitos (sem coluna de zero para a frente), entre 1 e 12 | 6 |
| M | Minutos de dois dígitos (use a primeira coluna da primeira linha Zero) | 05 |
| S | Segundos de dois dígitos (use a primeira coluna da primeira linha zero) | 19 |
| L | Milissegundos de três dígitos (usando a primeira coluna da primeira linha zero) | 047 |
| N | Nanossegundos de nove dígitos (usando a primeira coluna da primeira linha) | 047000000 |
| P | Marca da tarde de capitalização | PM |
| p | Marca da tarde minúscula | PM |
| z | RFC 822 Offset do número GMT | -0800 |
| Z | Fuso horário | PST |
| s | Segundos de 1970-01-01 00:00:00 GMT | 1078884319 |
| Q | GMT de 1970-01-01 00:00:00 | 1078884319047 |
Data de conversão de string
A classe SimpleDateFormat possui alguns métodos adicionais, como parse (), que tenta converter uma string com base no formato do objeto armazenado em um determinado SimpleDateFormat. Por exemplo:
importar java.Util. String input = args.length == 0? "1818-11-11": args [0]; System.out.print (entrada + "Paresi como"); Data t; tente {t = ft.parse (entrada); System.out.println (t); } catch (parseException e) {System.out.println ("Unparsable usando" + ft); }}}O exemplo em execução do programa acima produzirá os seguintes resultados:
$ java datedemo1818-11-11 Pares como quarta-feira 11 00:00:00 gmt 1818 $ java datedemo 2007-12-012007-12-01 Palsões como SAT 01 00:00:00 GMT 2007
Durma por um tempo
Você pode realizar a qualquer momento durante a hibernação de um milissegundo a todo o ciclo de vida do seu computador. Por exemplo, o programa a seguir dormirá por 10 segundos:
importar java.util.*; classe pública SleepDemo {public static void main (string args []) {try {System.out.println (new Date () + "/n"); Thread.sleep (5*60*10); System.out.println (new Date () + "/n"); } catch (Exceção e) {System.out.println ("Obteve uma exceção!"); }}}Isso produzirá os seguintes resultados:
Dom 03 de maio 18:04:41 GMT 2009Sun 03 de maio 18:04:51 GMT 2009
Medir o tempo de execução
Às vezes, os momentos que podem ser medidos podem estar em milissegundos. Então, vamos reescrever o exemplo acima novamente:
importar java.util.*; classe pública diffdemo {public static void main (string args []) {try {long start = system.currenttimemillis (); System.out.println (new Date () + "/n"); Thread.sleep (5*60*10); System.out.println (new Date () + "/n"); Long end = System.currenttimemillis (); long diff = end - start; System.out.println ("A diferença é:" + diff); } catch (Exceção e) {System.out.println ("Obteve uma exceção!"); }}}Isso produzirá os seguintes resultados:
Dom 03 de maio 18:16:51 GMT 2009Sun 03 de maio 18:16:57 GMT 2009Difference é: 5993
Classe GregoriaCalendar
GregorianCalendar é uma implementação concreta da classe do calendário, ou seja, a implementação do gregoriano gregoriano normal com o qual você está familiarizado. A classe do calendário não é discutida neste tutorial, você pode conferir a documentação Java padrão.
O método getInstance () do calendário retorna um GregoriaCalendar inicializado com a data e o tempo e o horário do local e o tempo de fuso horário. Dois campos são definidos em Gregoriancalendar: AD e BC. Estes representam duas épocas definidas no calendário gregoriano.
Existem também vários construtores de objetos de GregorianCalendar:
| Sn | Descrição do construtor |
|---|---|
| 1 | GregoriaCalendar () Construa o GregoriaCalendar padrão usando o horário atual no fuso horário padrão com a localidade padrão. |
| 2 | GregoriaCalendar (ano int, int mês, data int) Defina a localidade padrão no fuso horário padrão para construir um GregorianCalendar com a data fornecida |
| 3 | GregoriaCalendar (INT ano, Int Mês, Int Data, Int Hour, Int Minute) Construa um GregoriaCalendar com a data e a hora definidas definidas para o fuso horário padrão com a localidade padrão. |
| 4 | GregoriaNCalendar (INT ano, Int Mês, Int Data, Int Hour, Int Minute, Int Second) Construa um GregoriaCalendar com a data e a hora definidas para o fuso horário padrão com o local padrão |
| 5 | GregoriaNCalendar (alocale da localidade) Construa um GregorianCalendar com base no horário atual e no fuso horário padrão da localidade fornecida. |
| 6 | GregoriaCalendar (zona horária) Com base no horário atual, um GregoriaCalendar é construído em um determinado fuso horário usando o local padrão. |
| 7 | GregoriaCalendar (zona horária, alocale local) Um GregoriaCalendar é construído com base no horário atual e no fuso horário fornecido da localidade fornecida. |
| Sn | Métodos e descrições |
|---|---|
| 1 | Void Add (campo int, Int Monta) Uma regra baseada em calendário adiciona uma quantidade de tempo especificada (assinada) ao campo de tempo fornecido. |
| 2 | Protected Void ComputeFields () Converta o UTC em valor do campo de tempo de milissegundos. |
| 3 | Void ComputetETime protegido () Substitua milissegundos nos quais o calendário converte o valor do domínio do tempo é UTC. |
| 4 | BOOLEANOS iguais (objeto obj) Este gregoriancalendar é comparado com uma referência de objeto. |
| 5 | int get (Int Field) Obtém o valor do domínio do tempo fornecido. |
| 6 | int getActualMaximum (campo int) Retorna o valor máximo possível do campo, fornecido à data atual. |
| 7 | int getActualMinimum (INT Field) Retorna o valor mínimo que o campo pode ter, dada a data atual. |
| 8 | int getGreatestminimum (INT Field) Retorna o valor alto e mais baixo (se houver uma alteração) para o campo especificado. |
| 9 | Data GetGregionAnChange () Obtenha a data de mudança no calendário gregoriano. |
| 10 | int getLeastMaximum (campo int) Retorna o menor valor máximo para o campo especificado, se houver uma alteração. |
| 11 | int getMaximum (campo int) Retorna o valor máximo no campo especificado. |
| 12 | Data gettime () Obtenha a hora atual do calendário. |
| 13 | longo gettimeinmillis () A hora atual para obter o calendário. |
| 14 | Filho do tempo getTimeZone () Obtenha o fuso horário. |
| 15 | int getminimum (campo int) Retorna o valor mínimo no campo especificado. |
| 16 | int hashcode () Reescrever hashcode. |
| 17 | Boolean Isleapyear (int ano) Determina que um determinado ano é um ano bissexto. |
| 18 | Void Roll (campo int, booleano para cima) Adicione ou subtraia o tempo (para cima/para baixo) (para cima/para baixo) uma unidade no campo de tempo fornecido, sem alterar o campo maior. |
| 19 | Conjunto de vazios (campo int, int valor) Define o campo de tempo com o valor fornecido. |
| 20 | Conjunto de Void (Ano int, Int Mês, Int Data) Definido para o valor do ano, mês e dia. |
| vinte e um | Void Set (Ano int, Int Mês, Int Data, Int Hour, Int Minute) Situado para valores de ano, mês, dia, hora e minuto. |
| vinte e dois | Void Set (INT ano, Int Mês, Int Data, Int Hour, Int Minute, Int Second) Definido no valor do ano, mês, dia, hora, minuto e segundo do campo. |
| vinte e três | Void SetgregorianChange (data da data) Defina a data de mudança de GregoriaNEndar. |
| vinte e quatro | Void Settime (data de data) Define a hora atual e a data fornecida do calendário. |
| 25 | Void SettimeInmillis (Millis Long) Defina o horário atual do calendário a partir do valor longo dado. |
| 26 | Void SettimeZone (valor do fuso horário) Define o fuso horário com o valor do fuso horário fornecido. |
| 27 | String ToString () Retorna a representação da string deste calendário. |
import java.util.*;public class GregorianCalendarDemo { public static void main(String args[]) { String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int ano; // Crie um GregoriaCalendar inicializado // com a data e a hora atuais no local // de cronograma padrão. GregoriaCalendar Gcalendar = New GregorianCalendar (); // Exibe informações atuais sobre horário e data. System.out.print ("Date:"); System.out.print (meses [gcalendar.get (calendar.month)]); System.out.print ("" + gcalendar.get (calendar.date) + ""); System.out.println (ano = gcalendar.get (calendar.year)); System.out.print ("Time:"); System.out.print (gcalendar.get (calendar.hour) + ":"); System.out.println (gcalendar.get (calendar.Minute) + ":"); System.out.println (gcalendar.get (calendar.second)); // Teste se o ano atual é um ano bissenso se (gcalendar.isleapyear (ano)) {System.out.println ("O ano atual é um ano bissexto"); } else {System.out.println ("O ano atual não é um ano bissexto"); }}}Isso produzirá os seguintes resultados:
Data: 22 de abril de 2009Time: 11: 25: 27O ano atual não é um ano bissexto
Appleto de calendário
Vamos dar uma olhada em um applet de calendário. Aqui, usamos a estrutura tradicional do MVC para projetar três categorias: calendarviewer, calendarcontroller e calendarmodel.
O CalendarViewer.java processa principalmente a interface do usuário, usa o código existente, organiza -o e extrai a lógica de negócios, para que se concentre no processamento da camada de exibição.
CalendarViewer.java
A classe pública CalendarViewer estende o JWindow implementa o ActionListener {jpanel calendaryMpanel = null; JButton LeftButton = New JButton ("<<"); JButton Rightbutton = New JButton (">>"); Etiqueta ano -label = new Label (); Etiqueta mensal de etiqueta = new Label (); Etiqueta passedDaysLabel = new Label (); Jpanel calendarwdpanel = null; // é o corpo de inclusão total do calendar_week e calendar_days jpanel calendarweekPanel = null; // layout para colunas semanais jpaNex CalendardAysPanel = null; // layout para colunas de data; JButton QuitButton = New Jbutton ("Close"); Fronteira vazio = borderfactory.createEmptyBorder (); CalendarController cController = new calendarController (); public calendarViewer () {super (); BuildUi (); } public void BuildUi () {BuildTopPanel (); BuildCenterPanel (); BuildBottompAnel (); setLayout (new BorderLayout ()); . . . . . . } private void BuildTopPanel () {. . . . . . } private void BuildCenterPanel () {. . . . . . } private void BuildBottompAnel () {. . . . . . } public jpanel updateAysPanel () {. . . . . . } public void updatePassedDaysLabel () {. . . . . . } public void ActionPerformed (ActionEvent E) {. . . . . . } public static void main (string [] args) {swingutilities.invokelater (new runnable () {public void run () {new calendarViewer ();}}); }}A estrutura da interface do usuário é dividida principalmente em 3 blocos, correspondendo aos três painéis na figura superior, média e inferior.
O processamento da escuta de eventos é concluído pelo método a seguir.
A atualização da interface do usuário baseada em eventos é feita pelos dois métodos a seguir.
updateAysPanel (); UpdatePassedDaysLabel (); calendarController.java lida principalmente com lógica de negócios específica, enquanto alguma lógica de algoritmo do calendário usada que não está relacionada ao aplicativo específica é entregue ao calendarmodel.java. CalendarModel.javapublic Classe calendaModel {private int Daytab [] [] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31, 31}, {0, 31, 29, 31, 30, 31, 31, 31, 31, 31}}}; public boolean isleapyear (int ano) {return ((ano % 4 == 0 && ano % 100! = 0) || ano % 400 == 0); } public int Dayofyear (Int Day, Int Month, int ano) {int leap = Isleapyear (ano)? 1: 0; for (int i = 1; i <mês; i ++) dia+= Daytab [Leap] [i]; dia de volta; } public int DaysOfmonth (Int Mês, Int Ano) {int leap = IsleapYear (ano)? 1: 0; retornar Daytab [Leap] [mês]; } public int DayOfWeek (int dia, int, mês, int ano) {if (mês == 1) {mês = 13; ano--; } if (mês == 2) {mês = 14; ano--; } retornar (dia + 2 * mês + 3 * (mês + 1) / 5 + ano + ano / 4 - ano / 100 + ano / 400) % 7 + 1; }}Crie uma matriz bidimensional que represente o número de dias por mês para anos bissextos e anos sem lapidação, respectivamente. Os principais métodos são:
Fórmula de cálculo de Kim Larson