Setar String em um Calendar[RESOLVIDO]

3 respostas
Thiago_de_Paula_Bese

Boa tarde.

Pessoal, tenho uma função booleana que compara 2 datas. O objetivo desta função e verificar se a data passada é maior que a anterior (a anterior em formato String armazenada em um arquivo TXT). Entretanto, estou com problemas para setar a String no calendar.

Vou postar a função completa:

public boolean isNovaMensagem(Message mensagem) throws FileNotFoundException, IOException, MessagingException, ParseException
    {
        
            File file = new File("C:\\xml\\data_ultima_msg.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader br = new BufferedReader(fileReader);
            
            String caminhoTXT = br.readLine();
            
            Calendar ultima_msg = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
            ultima_msg.setTime(sdf.parse(caminhoTXT));
            
            System.out.println("Data da ultima mensagem: " + ultima_msg);
            
            Calendar mensagemNova = Calendar.getInstance();
            mensagemNova.setTime(mensagem.getSentDate());
            System.out.println("Data mensagem lida: " + mensagemNova);
            
            if(mensagemNova.compareTo(ultima_msg) > 0)
                return true;
            
        return false;
    }

Debugando o código, vi que existe um erro de conversão na linha

ultima_msg.setTime(sdf.parse(caminhoTXT));

Segue o erro na console do netbeans:

Exception in thread "main" java.text.ParseException: Unparseable date: "Wed Feb 06 17:22:55 BRST 2013" at java.text.DateFormat.parse(DateFormat.java:357) at MailProcess.isNovaMensagem(MailProcess.java:68) at MailProcess.printMessage(MailProcess.java:84) at MailProcess.processEmail(MailProcess.java:47) at Main.main(Main.java:12) Java Result: 1

Como realizo esta conversão, lembrando que pego a string em um arquivo TXT: EX: Wed Feb 06 17:22:55 BRST 2013.

Agradeço desde já… :smiley:

3 Respostas

robinsonbsilva

Veja: http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

public class DateFormatExample2 {

    public static void main(String[] args) {
        // Make a String that has a date in it, with MEDIUM date format
        // and SHORT time format.
        String dateString = "Nov 4, 2003 8:14 PM";

        // Get the default MEDIUM/SHORT DateFormat
        DateFormat format =
            DateFormat.getDateTimeInstance(
            DateFormat.MEDIUM, DateFormat.SHORT);

        // Parse the date
        try {
            Date date = format.parse(dateString);
            System.out.println("Original string: " + dateString);
            System.out.println("Parsed date    : " +
                 date.toString());
        }
        catch(ParseException pe) {
            System.out.println("ERROR: could not parse date in string \"" +
                dateString + "\"");
        }
    }
}
> java DateFormatExample2
Original string: Nov 4, 2003 8:14 PM
Parsed date    : Tue Nov 04 20:14:00 EST 2003
Rodrigo_Sasaki

Seu DateFormat provavelmente está localizado para o Brasil, e Wed e Feb Não estão em português :slight_smile:
Tente instanciá-lo assim: DateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);

Thiago_de_Paula_Bese

Valeu pessoal. [RESOLVIDO]. Acrescentei Locale.US.

=D

Criado 7 de fevereiro de 2013
Ultima resposta 7 de fev. de 2013
Respostas 3
Participantes 3