Parseerror bei richtiger Syntax

Templarthelast

Bekanntes Mitglied
In meinem Programm rufe ich emails von einem mailServer hab und durchsuche dabei ihren Header nachdem Datum, an dem sie empfangen werden. Dabei erhalte ich
Code:
Received: (qmail invoked by alias); 26 Mar 2012 00:17:10 -0000
als Rückgabe und mit
Java:
emailRec = recvreply.substring(36, 56)
dann einen String raus, alldings gibt mir der Compiler bei
Java:
SimpleDateFormat stringToDate = new SimpleDateFormat("dd MMM yyyy hh:mm:ss");
emailDate = stringToDate.parse(emailRec)
den Fehler aus:
Code:
java.text.ParseException: Unparseable date: "26 Mar 2012 00:17:10"

Gesamter Code:
Java:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.apache.commons.codec.binary.Base64;

public class EmailClient {

	// eMail + Kommunikations Variablen
	private String emailAdress = null;
	private String pw = null;

	private String emailBase = null;
	private String pwBase = null;

	private String popServer = null;
	private String smtpServer = null;

	private int popPort;
	private int smtpPort;

	private int emailNumber;
	private String emailRec;

	private Date startDate = null;
	private Date endDate = null;

	private String[] emails = null;

	// Swing Varaiablen

	JFrame frame;
	JLabel label;
	JLabel startData;
	JLabel endData;
	GridLayout layout;
	JLabel emailAdressText;
	JLabel pwText;
	JLabel popServerText;
	JLabel smtpServerText;
	JLabel popPortText;
	JLabel smtpPortText;
	JLabel startDataText;
	JLabel endDataText;

	JTextArea message;
	JLabel rightSide;
	JLabel messageText;
	JLabel buttons;
	JButton start;
	JButton end;

	JTextField emailAdressField;
	JPasswordField pwField;
	JTextField popServerField;
	JTextField smtpServerField;
	JTextField popPortField;
	JTextField smtpPortField;

	JTextField startDataDay;
	JTextField startDataMonth;
	JTextField startDataYear;
	JTextField startDataHour;
	JTextField startDataMinute;

	JTextField endDataDay;
	JTextField endDataMonth;
	JTextField endDataYear;
	JTextField endDataHour;
	JTextField endDataMinute;

	JLabel dot;
	JLabel slash;

	public EmailClient() {
		frame = new JFrame("email Abwesendheitsnachricht");
		layout = new GridLayout(0, 2);
		frame.setLayout(layout);

		label = new JLabel();
		label.setLayout(layout);

		dot = new JLabel(":");
		slash = new JLabel("/");

		startData = new JLabel();
		startData.setLayout(new FlowLayout());
		endData = new JLabel();
		endData.setLayout(new FlowLayout());

		emailAdressText = new JLabel("email Adresse:");
		pwText = new JLabel("email Passwort: ");
		popServerText = new JLabel("POP3 Server URL/IP: ");
		smtpServerText = new JLabel("SMTP Server URL/IP: ");
		popPortText = new JLabel("POP3 Port: ");
		smtpPortText = new JLabel("SMTP Server Port: ");
		startDataText = new JLabel("Startzeitpunkt: ");
		endDataText = new JLabel("Endzeitpunkt: ");

		emailAdressField = new JTextField();
		pwField = new JPasswordField();
		popServerField = new JTextField();
		smtpServerField = new JTextField();
		popPortField = new JTextField();
		smtpPortField = new JTextField();

		startDataDay = new JTextField("01");
		startDataMonth = new JTextField("01");
		startDataYear = new JTextField("2000");
		startDataHour = new JTextField("00");
		startDataMinute = new JTextField("00");

		endDataDay = new JTextField("01");
		endDataMonth = new JTextField("01");
		endDataYear = new JTextField("2000");
		endDataHour = new JTextField("00");
		endDataMinute = new JTextField("00");

		label.add(emailAdressText);
		label.add(emailAdressField);
		label.add(pwText);
		label.add(pwField);
		label.add(popServerText);
		label.add(popServerField);
		label.add(popPortText);
		label.add(popPortField);
		label.add(smtpServerText);
		label.add(smtpServerField);
		label.add(smtpPortText);
		label.add(smtpPortField);
		label.add(startDataText);
		label.add(endDataText);

		startData.add(startDataMinute);
		startData.add(new JLabel(":"));
		startData.add(startDataHour);
		startData.add(startDataDay);
		startData.add(new JLabel("/"));
		startData.add(startDataMonth);
		startData.add(new JLabel("/"));
		startData.add(startDataYear);

		endData.add(endDataMinute);
		endData.add(dot);
		endData.add(endDataHour);
		endData.add(endDataDay);
		endData.add(new JLabel("/"));
		endData.add(endDataMonth);
		endData.add(new JLabel("/"));
		endData.add(endDataYear);

		start = new JButton("start");
		start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getData();
			}
		});
		end = new JButton("stop");
		buttons = new JLabel();
		buttons.setLayout(new FlowLayout());

		label.add(startData);
		label.add(endData);

		message = new JTextArea();
		message.setLineWrap(true);
		message.setWrapStyleWord(true);
		messageText = new JLabel("Abwesenheitsnachricht");

		buttons.add(start);
		buttons.add(end);

		rightSide = new JLabel();
		rightSide.setLayout(new GridLayout(0, 1));
		rightSide.add(messageText);
		rightSide.add(message);
		rightSide.add(buttons);

		frame.add(label);
		frame.add(rightSide);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(640, 480);
		frame.setVisible(true);
	}

	public static void main(String[] argc) {

		new EmailClient();

	}

	@SuppressWarnings("deprecation")
	public void getData() {

		String start = startDataDay.getText() + "." + startDataMonth.getText()
				+ "." + startDataYear.getText() + " "
				+ startDataMinute.getText() + ":" + startDataHour.getText();
		SimpleDateFormat dataToDate = new SimpleDateFormat("dd.MM.yyyy HH:mm");

		String end = endDataDay.getText() + "." + endDataMonth.getText() + "."
				+ endDataYear.getText() + " " + endDataMinute.getText() + ":"
				+ endDataHour.getText();

		try {
			startDate = dataToDate.parse(start);
			endDate = dataToDate.parse(end);
		} catch (ParseException e) {
			e.printStackTrace();
		}

		if (endDate.getTime() > startDate.getTime()) {
			emailAdress = emailAdressField.getText();
			pw = pwField.getText();

			emailBase = Base64.encodeBase64String(emailAdress.getBytes());
			pwBase = Base64.encodeBase64String(pw.getBytes());

			popServer = popServerField.getText();
			smtpServer = smtpServerField.getText();

			popPort = Integer.parseInt(popPortField.getText());
			smtpPort = Integer.parseInt(smtpPortField.getText());

		} else {
			JOptionPane.showMessageDialog(frame,
					"Der Endzeitpunkt muss nach dem Startzeitpunkt liegen. ",
					"Warnung", JOptionPane.WARNING_MESSAGE);
		}
		getMail();
	}

	@SuppressWarnings("deprecation")
	public void sendEmail(String retriever, String subject) {
		Socket socket;
		PrintStream out;
		DataInputStream in;
		String recvreply;

		try {
			socket = new Socket(smtpServer, smtpPort);
			in = new DataInputStream(new BufferedInputStream(
					socket.getInputStream(), 2500));
			out = new PrintStream(new BufferedOutputStream(
					socket.getOutputStream(), 2500), true);
			recvreply = in.readLine();

			if (recvreply.startsWith("220")) {
				System.out.println("Server Response : " + recvreply);
				out.println("HELO " + emailAdress);
				recvreply = in.readLine();

				if (recvreply.startsWith("250")) {
					System.out.println("Server Response : " + recvreply);
					out.println("AUTH LOGIN");
					recvreply = in.readLine();

					if (recvreply.startsWith("334")) {
						System.out.println("Server Response : " + recvreply);
						out.println(emailBase);
						recvreply = in.readLine();

						if (recvreply.startsWith("334")) {
							System.out
									.println("Server Response : " + recvreply);
							out.println(pwBase);
							recvreply = in.readLine();

							if (recvreply.startsWith("235")) {
								System.out.println("Server Response : "
										+ recvreply);
								out.println("MAIL FROM:<" + emailAdress + ">");
								recvreply = in.readLine();

								if (recvreply.startsWith("250")) {
									System.out.println("Server Response : "
											+ recvreply);
									out.println("RCPT TO:<" + retriever + ">");
									recvreply = in.readLine();

									if (recvreply.startsWith("250")) {
										System.out.println("Server Response : "
												+ recvreply);
										out.println("DATA");
										recvreply = in.readLine();

										if (recvreply.startsWith("354")) {
											System.out
													.println("Server Response : "
															+ recvreply);
											out.println("FROM:<lukaseichler@gmx.de>");
											out.println("TO:<" + retriever
													+ ">");
											out.println("Subject: " + subject
													+ "\n");
											out.println(message);
											out.println(".");
											recvreply = in.readLine();

											if (recvreply.startsWith("250")) {
												System.out
														.println("Server Response : "
																+ recvreply);
												out.println("QUIT");
												recvreply = in.readLine();

												if (recvreply.startsWith("221")) {
													System.out
															.println("Server Response : "
																	+ recvreply);
												}

											}

										}

									}

								}

							}

						}

					}

				}

			}

		} catch (IOException e) {
			System.out.println("could not connect to port");
		}
	}

	@SuppressWarnings("deprecation")
	public int getMail() {
		Socket socket;
		PrintStream out;
		DataInputStream in;
		String recvreply;
		String email = "";
		SimpleDateFormat stringToDate = new SimpleDateFormat(
				"dd MMM yyyy hh:mm:ss");
		Date emailDate = null;
		int j = 0;
		emailAdress = "lukaseichler@gmx.de";
		try {
			socket = new Socket("pop.gmx.net", 110);
			in = new DataInputStream(new BufferedInputStream(
					socket.getInputStream(), 2500));
			out = new PrintStream(new BufferedOutputStream(
					socket.getOutputStream(), 2500), true);
			recvreply = in.readLine();

			if (recvreply.startsWith("+OK")) {
				System.out.println("Server Response : " + recvreply);
				out.println("user [email]lukaseichler@gmx.de[/email]");

				recvreply = in.readLine();
				if (recvreply.startsWith("+OK password required for user")) {
					System.out.println("Server Response : " + recvreply);
					out.println("pass @@@uppedBy-Polo@@@");
					recvreply = in.readLine();
					if (recvreply.startsWith("+OK")) {
						System.out.println("Server Response : " + recvreply);
						emailNumber = Integer.parseInt(recvreply.substring(
								19 + emailAdress.length(),
								recvreply.indexOf(" ",
										19 + emailAdress.length())));
						do {

							out.println("Top " + (emailNumber - j) + " 0");
							recvreply = in.readLine();
							System.out
									.println("Server Response : " + recvreply);

							for (int i = 0; i <= 8; i++) {
								recvreply = in.readLine();
								System.out.println("Server Response : "
										+ recvreply);
								if (i == 2) {
									emailRec = recvreply.substring(36, 56);
									emailDate = stringToDate.parse(emailRec);
								}

							}
							emails[j] = recvreply.substring(6);

						} while (emailDate.getTime() >= startDate.getTime());
						startDate = new Date();
						System.out.println(startDate);
						socket.close();
						System.out.println("Closed Connection with Server");
					}

				}

			}

		}

		catch (IOException e) {
			email = "Error in Connecting to Port";
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return j;

	}
}
 
G

Gast2

Gast
Java:
dd MMM yyyy hh:mm:ss
Das kleine h steht für
Code:
Hour in am/pm (1-12)
. Da gibts dann keine nullte Stunde. Verwende stattdessen K.
 
S

SlaterB

Gast
der Fehler ist aber ein anderer, und ich möchte auch anmerken dass die 430 Zeilen Code doch relativ nutzlos sind, wenn schon zwei entscheidende Zeilen identifiziert

zum Fehler bei SimpleDateFormat bietet sich immer und immer wieder an, den umgekehrten Weg zu gehen:
was kommt raus wenn man ein Date zu String parst und kann dieser Text dann gelesen werden?

Java:
public class Test
{
    public static void main(String[] args) throws Exception
    {
        Date date = new Date(112, 2, 26, 0, 17, 10);
        SimpleDateFormat stringToDate = new SimpleDateFormat("dd MMM yyyy hh:mm:ss");
        System.out.println(stringToDate.format(date));
        
        String st = "26 Mrz 2012 12:17:10";
        System.out.println(stringToDate.parse(st));
        
    }
}

die Lösung habe ich dann quasi schon mitgepostet: deutsche Locale, wahrscheinlich auf Englisch umzustellen
 

Templarthelast

Bekanntes Mitglied
Ich hab es mal mit
Java:
dd MMM yyyy HH:mm:ss
und
Java:
dd MMM yyyy kk:mm:ss
versucht aber das Problem bleibt.
 
N

nillehammer

Gast
Wahrscheinlich ist die Locale das Problem.
Java:
new SimpleDateFormat("dd MMM yyyy hh:mm:ss");
Erzeugt ein SimpleDateFormat mit der Default-Locale des Systems. Die ist bei Dir wahrscheinlich "de". Wenn Du jetzt das englische Datum Deiner Mail mit deuscher Locale parst, kommt er mit der Abkürzung für den Monat "Mar" nicht zurecht (im Deutschen ist die dreibuchstabige Abkürzung des Monats März nämlich "Mrz"). Nutze folgenden Konstruktor, um das zu lösen:
Java:
new SimpleDateFormat("dd MMM yyyy hh:mm:ss", Locale.US);
[EDIT]
SlaterB hat's ja auch schon geschrieben...
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Allgemeine Java-Themen 3
Tommy135 Syntax Highlighting Allgemeine Java-Themen 3
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
W JavaCC to create my only syntax Allgemeine Java-Themen 5
B Syntax-Erkennungs Problem Allgemeine Java-Themen 2
H Syntax ProcessBuilder Allgemeine Java-Themen 7
B Syntax-Highlighting abspeichern Allgemeine Java-Themen 7
M Syntax Highlighter für MS Word? Allgemeine Java-Themen 2
H Pattern.compile Syntax Allgemeine Java-Themen 15
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
C Syntax printf Allgemeine Java-Themen 5
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
P JTextPane mit Java (eclipse) Syntax Highlighting Allgemeine Java-Themen 4
D Kompakte Syntax für Funktionen Allgemeine Java-Themen 7
G Syntax für den Dateinamen Allgemeine Java-Themen 1
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
G Java Syntax Allgemeine Java-Themen 7
T Syntax Error Allgemeine Java-Themen 9
F Plugin damit M$ Word Java syntax versteht? Allgemeine Java-Themen 12
D Die <> Syntax Allgemeine Java-Themen 8
W Syntax - Frage Allgemeine Java-Themen 6
padde479 jEdit Syntax Highlighting Allgemeine Java-Themen 3
G Syntax-Fehler beim aufrufen von generischen Klassenmethoden Allgemeine Java-Themen 4
V syntax problem Allgemeine Java-Themen 6
S Syntax Error, insert "AssignmentOperator Expression&amp Allgemeine Java-Themen 3
F log4j XML-Syntax Allgemeine Java-Themen 4
B Syntax error on token ,VariableDeclaratorId expected after. Allgemeine Java-Themen 3
G Syntax Übersicht Suche Allgemeine Java-Themen 7
A gültige syntax einer ip-adresse? Allgemeine Java-Themen 2
S java syntax zusammenfassung Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben