Advertisement
Guest User

data.java

a guest
Jan 24th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.66 KB | None | 0 0
  1. package data;
  2.  
  3. /**
  4. * Representa uma data através do dia, mês e ano.
  5. *
  6. * @author ISEP-DEI-PPROG
  7. */
  8. public class Data {
  9.  
  10. /**
  11. * O ano da data.
  12. */
  13. private int ano;
  14.  
  15. /**
  16. * O mês da data.
  17. */
  18. private int mes;
  19.  
  20. /**
  21. * O dia da data.
  22. */
  23. private int dia;
  24.  
  25. /**
  26. * O ano da data por omissão.
  27. */
  28. private static final int ANO_POR_OMISSAO = 1;
  29.  
  30. /**
  31. * O mês da data por omissão.
  32. */
  33. private static final int MES_POR_OMISSAO = 1;
  34.  
  35. /**
  36. * O dia da data por omissão.
  37. */
  38. private static final int DIA_POR_OMISSAO = 1;
  39.  
  40. /**
  41. * Nomes dos dias da semana.
  42. */
  43. private static String[] nomeDiaDaSemana = {"Domingo", "Segunda-feira",
  44. "Terça-feira", "Quarta-feira",
  45. "Quinta-feira", "Sexta-feira",
  46. "Sábado"};
  47.  
  48. /**
  49. * Número de dias de cada mês do ano.
  50. */
  51. private static int[] diasPorMes = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30,
  52. 31, 30, 31};
  53.  
  54. /**
  55. * Nomes dos meses do ano.
  56. */
  57. private static String[] nomeMes = {"Inválido", "Janeiro", "Fevereiro",
  58. "Março", "Abril", "Maio", "Junho",
  59. "Julho", "Agosto", "Setembro",
  60. "Outubro", "Novembro", "Dezembro"};
  61.  
  62. /**
  63. * Constrói uma instância de Data recebendo o ano, o mês e o dia.
  64. *
  65. * @param ano o ano da data
  66. * @param mes o mês da data
  67. * @param dia o dia da data
  68. */
  69. public Data(int ano, int mes, int dia) {
  70. this.ano = ano;
  71. this.mes = mes;
  72. this.dia = dia;
  73. }
  74.  
  75. /**
  76. * Constrói uma instância de Data com a data por omissão.
  77. */
  78. public Data() {
  79. ano = ANO_POR_OMISSAO;
  80. mes = MES_POR_OMISSAO;
  81. dia = DIA_POR_OMISSAO;
  82. }
  83.  
  84. /**
  85. * Devolve o ano da data.
  86. *
  87. * @return ano da data
  88. */
  89. public int getAno() {
  90. return ano;
  91. }
  92.  
  93. /**
  94. * Devolve o mês da data.
  95. *
  96. * @return mês da data
  97. */
  98. public int getMes() {
  99. return mes;
  100. }
  101.  
  102. /**
  103. * Devolve o dia da data.
  104. *
  105. * @return dia da data
  106. */
  107. public int getDia() {
  108. return dia;
  109. }
  110.  
  111. /**
  112. * Modifica o ano, o mês e o dia da data.
  113. *
  114. * @param ano o novo ano da data
  115. * @param mes o novo mês da data
  116. * @param dia o novo dia da data
  117. */
  118. public void setData(int ano, int mes, int dia) {
  119. this.ano = ano;
  120. this.mes = mes;
  121. this.dia = dia;
  122. }
  123.  
  124. /**
  125. * Devolve a descrição textual da data no formato: diaDaSemana, dia de mês
  126. * de ano.
  127. *
  128. * @return caraterísticas da data
  129. */
  130. public String toString() {
  131. return diaDaSemana() + ", " + dia + " de " + nomeMes[mes] + " de " + ano;
  132. }
  133.  
  134. /**
  135. * Devolve a data no formato:%04d/%02d/%02d.
  136. *
  137. * @return caraterísticas da data
  138. */
  139. public String toAnoMesDiaString() {
  140. return String.format("%04d/%02d/%02d", ano, mes, dia);
  141. }
  142.  
  143. /**
  144. * Devolve o dia da semana da data.
  145. *
  146. * @return dia da semana da data
  147. */
  148. public String diaDaSemana() {
  149. int totalDias = contaDias();
  150. totalDias = totalDias % 7;
  151.  
  152. return nomeDiaDaSemana[totalDias];
  153. }
  154.  
  155. /**
  156. * Devolve true se a data for maior do que a data recebida por parâmetro.
  157. * Se a data for menor ou igual à data recebida por parâmetro, devolve
  158. * false.
  159. *
  160. * @param outraData a outra data com a qual se compara a data
  161. * @return true se a data for maior do que a data recebida por parâmetro,
  162. * caso contrário devolve false
  163. */
  164. public boolean isMaior(Data outraData) {
  165. int totalDias = contaDias();
  166. int totalDias1 = outraData.contaDias();
  167.  
  168. return totalDias > totalDias1;
  169. }
  170.  
  171. /**
  172. * Devolve a diferença em número de dias entre a data e a data recebida por
  173. * parâmetro.
  174. *
  175. * @param outraData a outra data com a qual se compara a data para calcular
  176. * a diferença do número de dias
  177. * @return diferença em número de dias entre a data e a data recebida por
  178. * parâmetro
  179. */
  180. public int diferenca(Data outraData) {
  181. int totalDias = contaDias();
  182. int totalDias1 = outraData.contaDias();
  183.  
  184. return Math.abs(totalDias - totalDias1);
  185. }
  186.  
  187. /**
  188. * Devolve a diferença em número de dias entre a data e a data recebida por
  189. * parâmetro com ano, mês e dia
  190. *
  191. * @param ano o ano da data com a qual se compara a data para calcular a
  192. * diferença do número de dias
  193. * @param mes o mês da data com a qual se compara a data para calcular a
  194. * diferença do número de dias
  195. * @param dia o dia da data com a qual se compara a data para calcular a
  196. * diferença do número de dias
  197. * @return diferença em número de dias entre a data e a data recebida por
  198. * parâmetro com ano, mês e dia
  199. */
  200. public int diferenca(int ano, int mes, int dia) {
  201. int totalDias = contaDias();
  202. Data outraData = new Data(ano, mes, dia);
  203. int totalDias1 = outraData.contaDias();
  204.  
  205. return Math.abs(totalDias - totalDias1);
  206. }
  207.  
  208. /**
  209. * Devolve true se o ano passado por parâmetro for bissexto.
  210. * Se o ano passado por parâmetro não for bissexto, devolve false.
  211. *
  212. * @param ano o ano a validar
  213. * @return true se o ano passado por parâmetro for bissexto, caso contrário
  214. * devolve false
  215. */
  216. public static boolean isAnoBissexto(int ano) {
  217. return ano % 4 == 0 && ano % 100 != 0 || ano % 400 == 0;
  218. }
  219.  
  220. /**
  221. * Devolve o número de dias desde o dia 1/1/1 até à data.
  222. *
  223. * @return número de dias desde o dia 1/1/1 até à data
  224. */
  225. private int contaDias() {
  226. int totalDias = 0;
  227.  
  228. for (int i = 1; i < ano; i++) {
  229. totalDias += isAnoBissexto(i) ? 366 : 365;
  230. }
  231. for (int i = 1; i < mes; i++) {
  232. totalDias += diasPorMes[i];
  233. }
  234. totalDias += (isAnoBissexto(ano) && mes > 2) ? 1 : 0;
  235. totalDias += dia;
  236.  
  237. return totalDias;
  238. }
  239.  
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement