fork(6) download
  1. import java.util.Calendar;
  2. import java.util.GregorianCalendar;
  3.  
  4. class Teste {
  5.  
  6. private static void mostrar(Horario agora, String objetivo) {
  7. Horario desejada = Horario.parse(objetivo);
  8. Horario falta = desejada.diferenca(agora);
  9. System.out.println(
  10. "Entre " + agora
  11. + " e " + desejada
  12. + ", a diferença é de " + falta
  13. + ".");
  14. }
  15.  
  16. public static void main(String[] args) {
  17. Horario agora = Horario.agora();
  18. mostrar(agora, "07:30");
  19. mostrar(new Horario( 5, 30), "07:30");
  20. mostrar(new Horario( 7, 10), "07:30");
  21. mostrar(new Horario( 0, 0), "07:30");
  22. mostrar(new Horario( 7, 0), "07:30");
  23. mostrar(new Horario( 7, 30), "07:30");
  24. mostrar(new Horario( 7, 31), "07:30");
  25. mostrar(new Horario(10, 0), "07:30");
  26. mostrar(new Horario(19, 30), "07:30");
  27. mostrar(new Horario(23, 59), "07:30");
  28. mostrar(new Horario( 0, 0), "23:59");
  29. mostrar(new Horario(23, 59), "00:00");
  30. }
  31. }
  32.  
  33. class Horario {
  34. private final int horas;
  35. private final int minutos;
  36.  
  37. public Horario(int horas, int minutos) {
  38. if (horas < 0 || horas > 23 || minutos < 0 || minutos > 59) {
  39. }
  40. this.horas = horas;
  41. this.minutos = minutos;
  42. }
  43.  
  44. public int getHoras() {
  45. return horas;
  46. }
  47.  
  48. public int getMinutos() {
  49. return minutos;
  50. }
  51.  
  52. public static Horario parse(String input) {
  53. char[] cs = input.toCharArray();
  54. if (cs.length != 5) throw new IllegalArgumentException();
  55. for (int i = 0; i < 5; i++) {
  56. if (i == 2) continue;
  57. if (cs[i] < '0' || cs[i] > '9') throw new IllegalArgumentException();
  58. }
  59. if (cs[2] != ':') throw new IllegalArgumentException();
  60.  
  61. int h = (cs[0] - '0') * 10 + cs[1] - '0';
  62. int m = (cs[3] - '0') * 10 + cs[4] - '0';
  63. return new Horario(h, m);
  64. }
  65.  
  66. public static Horario agora() {
  67. return new Horario(gc.get(Calendar.HOUR_OF_DAY), gc.get(Calendar.MINUTE));
  68. }
  69.  
  70. public Horario diferenca(Horario outro) {
  71. int difHoras = this.horas - outro.horas;
  72. int difMinutos = this.minutos - outro.minutos;
  73. while (difMinutos < 0) {
  74. difMinutos += 60;
  75. difHoras--;
  76. }
  77. while (difHoras < 0) {
  78. difHoras += 24;
  79. }
  80. return new Horario(difHoras, difMinutos);
  81. }
  82.  
  83. @Override
  84. public String toString() {
  85. return ((horas < 10) ? "0" : "") + horas + ":" + ((minutos < 10) ? "0" : "") + minutos;
  86. }
  87. }
Success #stdin #stdout 0.06s 4386816KB
stdin
Standard input is empty
stdout
Entre 05:53 e 07:30, a diferença é de 01:37.
Entre 05:30 e 07:30, a diferença é de 02:00.
Entre 07:10 e 07:30, a diferença é de 00:20.
Entre 00:00 e 07:30, a diferença é de 07:30.
Entre 07:00 e 07:30, a diferença é de 00:30.
Entre 07:30 e 07:30, a diferença é de 00:00.
Entre 07:31 e 07:30, a diferença é de 23:59.
Entre 10:00 e 07:30, a diferença é de 21:30.
Entre 19:30 e 07:30, a diferença é de 12:00.
Entre 23:59 e 07:30, a diferença é de 07:31.
Entre 00:00 e 23:59, a diferença é de 23:59.
Entre 23:59 e 00:00, a diferença é de 00:01.