TOPIC
PROBLEM 1619 - URI Fórum 1.0
This topic was solved and cannot recieve new replies.
-
hrodrigues2 replied 7 years ago
Por padrão a classe GregorianCalendar coloca o timezone como sendo o timezone da máquina. Sendo assim, ele vai levar em conta o horário de verão.
Pra resolver isso, basta colocar o timezone como UTC (que não tem horário de verão)
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); format.setTimeZone(TimeZone.getTimeZone("UTC"));
-
llima1 replied 8 years ago
estou tendo WA de 30% acredito q seja o horario de verão, alguem pode me ajudar?
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int casos = in.nextInt(); Date d1, d2; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < casos; i++) { try { d2 = sdf.parse(in.next()); d1 = sdf.parse(in.next()); long diferencaDias = (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24); System.out.println(Math.abs(diferencaDias)); } catch (Exception e) { } } } }
-
ctbdcosta replied 8 years ago
Olá! Alguem poderia me ajudar nesse problema? Dá resposta errada mas todos os casos que testo batem com o toolkit. Desconfio que seja por causa do horário de verão da classe Calendar, como faço para resolver?
import java.util.Scanner; import java.util.Calendar; import java.util.concurrent.TimeUnit; import java.util.TimeZone; public class uri1619 { public static void main(String[] args) { TimeZone zoneEgypt = TimeZone.getTimeZone("Egypt"); TimeZone.setDefault(zoneEgypt); Scanner in = new Scanner(System.in); Calendar anterior = Calendar.getInstance(); Calendar atual = Calendar.getInstance(); int n = in.nextInt(); long dif; for(int i=0;i<n;i++) { String a = in.next(); String b = in.next(); anterior.set(Calendar.YEAR,Integer.parseInt(a.substring(0,4))); anterior.set(Calendar.MONTH,Integer.parseInt(a.substring(5,7))); anterior.set(Calendar.DATE,Integer.parseInt(a.substring(8,10))); atual.set(Calendar.YEAR,Integer.parseInt(b.substring(0,4))); atual.set(Calendar.MONTH,Integer.parseInt(b.substring(5,7))); atual.set(Calendar.DATE,Integer.parseInt(b.substring(8,10))); if(atual.getTimeInMillis()>anterior.getTimeInMillis()) dif = atual.getTimeInMillis() - anterior.getTimeInMillis(); else dif = anterior.getTimeInMillis() - atual.getTimeInMillis(); dif = TimeUnit.DAYS.convert(dif, TimeUnit.MILLISECONDS); System.out.println(dif); } } }
-
griposati replied 8 years ago
Valeu veio pela dica não lembrava que existia em C esse header daí fiz tudo do zero e passei o problema em C mesmo
-
js.100 replied 8 years ago
Tanto em C como em C++ você pode usar a biblioteca padrão de data e hora do C. Veja mais aqui: http://www.cplusplus.com/reference/ctime/
-
griposati replied 8 years ago
Gente desculpa a pergunta mas quem resolveu esse problema em C poderia me dar uma dica de como conseguiu ? Valeu
-
ttogores replied 8 years ago
Odeio postar código aqui, mas não consigo achar o bug de jeito nenhum. Estou recebendo WA (30%). Se alguém puder ajudar, agradeço.
Resolvido. A classe GregorianCalendar do Java leva em conta o horário de verão do dia, então é necessário um trabalho extra para ajustar os milissegundos.
-
lalessandro replied 9 years ago
Olá,
Alguém poderia me ajudar para saber o porquê do meu código está recebendo Possible Runtime Error.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.GregorianCalendar; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(bf.readLine()); while (t-- > 0) { long diff = 0; String ent=""; do{ ent = bf.readLine(); }while(ent.trim().isEmpty()); String[] s2 = ent.split(" "); int y1, m1, d1; int y2, m2, d2; String[] s3 = s2[0].split("-"); y1 = Integer.parseInt(s3[0]); m1 = Integer.parseInt(s3[1]); d1 = Integer.parseInt(s3[2]); s3 = s2[1].split("-"); y2 = Integer.parseInt(s3[0]); m2 = Integer.parseInt(s3[1]); d2 = Integer.parseInt(s3[2]); GregorianCalendar c1 = new GregorianCalendar(y1, m1-1, d1); GregorianCalendar c2 = new GregorianCalendar(y2, m2-1, d2); GregorianCalendar menor; GregorianCalendar maior; if (c1.compareTo(c2) < 0) { menor = c1; maior = c2; } else { menor = c2; maior = c1; } diff = 0; while (menor.compareTo(maior) < 0) { if (menor.getActualMaximum(GregorianCalendar.DAY_OF_YEAR) > menor.get(GregorianCalendar.DAY_OF_YEAR)) { menor.add(GregorianCalendar.DAY_OF_YEAR, 1); diff++; } else { diff++; menor.add(GregorianCalendar.YEAR, 1); menor.set(GregorianCalendar.MONTH, 0); menor.set(GregorianCalendar.DAY_OF_MONTH, 1); } } System.out.println(Math.abs(diff)); } } }
Obrigado,