TOPIC

PROBLEM 1619 - URI Fórum 1.0

beecrowd asked 9 years ago

URI Online Judge Fórum 1.0

MOD

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,