Pergunta

Hoje é terça -feira, 9 de fevereiro de 2010 e quando imprimir a data em que recebo a data errada:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

A linha de impressão resulta: "Hoje está sábado 09 00:00:00 CST 2010"

Certamente não é sábado, 09 de janeiro, é terça -feira 09 de fevereiro. Estou assumindo que estou fazendo algo errado, então alguém pode me informar o que há de errado aqui? Eu tenho que definir manualmente o dia da semana?

Atualizar Nota: Eu não quero inicializar hoje com new Date() Porque eu quero as horas, minutos, segundos e milissegundos inicializados para 0. Isso é necessário para que eu possa comparar uma data de entrada do usuário hoje: se o usuário inserir a data de hoje e eu uso o formatador para construir um objeto de data, se eu inicializar hoje com new Date() e eu comparo as duas datas- hoje será depois a data selecionada pelo usuário (que está incorreta). Assim, preciso inicializar hoje no início do dia sem o HR/min/s/ms.

Foi útil?

Solução

Confusamente, os meses do calendário contam de 0 (janeiro) a 11 (dezembro), para que você esteja passando "2010-01-09" para formatter.parse () quando extrair o campo do mês do calendário.

Há uma discussão sobre isso em um relacionado Então pergunta.

Outras dicas

Se você não quiser usar o Jodatime, pode usar:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();

Isso é muito mais eficiente e menos propenso a erros do que sua abordagem de formatação/análise de sequência.

Se você pode usar o Jodatime, este é um método muito preferido:

LocalDate date = new DateTime().toLocaleDate();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top