Bitte um Hilfe, java.text.ParseException

L

Lucius1972

Neues Mitglied
0
Hallo Leute,
Ich versuche zwei Variabelen zu vergleichen und wenn ein Wert groesser ist als der andere soll ein Marker 'Neu' gesetzt werden.
Ich kriege aber immer eine ParseException:

Code:
java.text.ParseException: Unparseable date: "9 minutes ago" (at offset 0)

Kann mir bitte jemand helfen?
Vielen Dank im voraus.

Code:
final long latest = new Settings(context).getLatest(suffix);
		try {
			final Date d = Util.parseDate(topic.getTime());
			date = d.getTime();

		} catch (final ParseException e) {
			Log.e("Exception: ", String.valueOf(e));
		}

		if (latest == -1 || date > latest) {
			findViewById(R.id.topic_view_new).setVisibility(View.VISIBLE);
			newItem = true; // 'Neu' wird gesetzt
		}
	}

Hier muss Ich die parseDate variabele irgendwie umsetzen nach long denk Ich, aber wie.
Es sollten schon Strings sein denn die Werten spaeter in einder Listview angezeigt.

Code:
public static String formatDate(final long dt) {
		return formatDate(new Date(dt));
	}

	public static String formatDate(final Date date) {
		final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
				DateFormat.SHORT);
		return df.format(date);
	}

	public static final Date parseDate(final String date) throws ParseException {
		final String pattern = "EEE MMM dd, yyyy h:mm a";
		return parseDate(date, pattern);
	}
	
	public static final Date parseDate(final String date, final String pattern)
			throws ParseException {
		final SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.US);
		return format.parse(date);
	}
 
Du kannst Text nicht anhand seiner Grösse vergleichen ( nach Stringlänge wäre möglich)

Ich würde das oben alles mit long durchrechnen und erst zu String konvertieren wenn du die Listview generierst.

zu nem String kannst du es z.b. mit String.valueOf konvertieren.
 
Cynob schrieb:
Du kannst Text nicht anhand seiner Grösse vergleichen ( nach Stringlänge wäre möglich)

Ich würde das oben alles mit long durchrechnen und erst zu String konvertieren wenn du die Listview generierst.

zu nem String kannst du es z.b. mit String.valueOf konvertieren.

Hallo Cynob,
erstmal danke dir, koenntest du mir bitte auf die Spruenge helfen?
Wie sollte das aussehen?
Ich ziehe mich schon Tage die Haare aus dem Kopf hiermit.
 
:D so gut komm ich gerade mit dem Code oben nicht mit :D

Also wenn ich das jetzt verstanden habe möchtest du oben das Datum laden und mit der long "latest" vergleichen? Wenn denn das aktuelle Datum neuer ist als der wert aus latest soll ne View sichtbar gemacht werden.

Hab ich das jetzt so richtig verstanden?
 
Cynob schrieb:
:D so gut komm ich gerade mit dem Code oben nicht mit :D

Also wenn ich das jetzt verstanden habe möchtest du oben das Datum laden und mit der long "latest" vergleichen? Wenn denn das aktuelle Datum neuer ist als der wert aus latest soll ne View sichtbar gemacht werden.

Hab ich das jetzt so richtig verstanden?

Hallo Cynob,
Fast, wenn denn das aktuelle Datum neuer ist als der wert aus latest soll das neue item als 'Neu' markiert werden (newItem = true;)

Der ursprüngliche Beitrag von 13:18 Uhr wurde um 13:26 Uhr ergänzt:

Cynob schrieb:
:D so gut komm ich gerade mit dem Code oben nicht mit :D

Also wenn ich das jetzt verstanden habe möchtest du oben das Datum laden und mit der long "latest" vergleichen? Wenn denn das aktuelle Datum neuer ist als der wert aus latest soll ne View sichtbar gemacht werden.

Hab ich das jetzt so richtig verstanden?

Zusaetzlich werden die Elemente mit untengenannten Code in de Listview angelegt:

Code:
private String getDateString(final Date d) {
		if (d == null)
			return "";

		int[] elements1, elements2;

		elements1 = getDateElements(System.currentTimeMillis());
		elements2 = getDateElements(d.getTime());
		
		if (elements1[0] == elements2[0] && elements1[1] == elements2[1]) {
			if (elements1[2] == elements2[2])
				return "Today";

			final Calendar c = Calendar.getInstance();
			c.setTimeInMillis(System.currentTimeMillis());
			c.add(Calendar.DAY_OF_MONTH, -1);
			elements1 = getDateElements(c.getTimeInMillis());
			
			if (elements1[2] == elements2[2])
				return "Yesterday";

		}
		return Util.formatDate(d);
	}

	private int[] getDateElements(final long d) {
		final int[] elements = new int[3];
		final Calendar c = Calendar.getInstance();
		c.setTimeInMillis(d);
		elements[0] = c.get(Calendar.YEAR);
		elements[1] = c.get(Calendar.MONTH);
		elements[2] = c.get(Calendar.DAY_OF_MONTH);
		return elements;
	}
 
Wenn ich das richtig verstehe, willst du Text, die für Zeitpnkte stehen, nach der Zeit, für die sie stehen, sortieren. Dazu muss man, wie du offenbar schon ahnst, das Datum als Zeitpunkt interpretieren.

Wenn bei dir relative Zeitangaben wie "9 minutes ago" kommen, reicht ein SimplateDateParser natürlich nicht mehr aus. Da brauchst du eine extra Bibliothek. Natty (Natty Date Parser) könnte etwas für dich sein.
 
Eben komm ich mit ( denke ich)

Also das getTime (Date | Android Developers) gibt ja schon eine long aus - die würde ich zum vergleichen nicht zu M/d/y... parsen.
( dann sind beide Werte in millisekunden )

Ok und beim generieren der Listview würd ich dann z.B. so die longs zu Strings machen:

Code:
String string = String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) date), TimeUnit.MILLISECONDS.toSeconds((long) date) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) date)));

Das ganze halt noch auf Jahre und so angepasst - ich hab hier n bisschen c&p von einem meiner apps betrieben :D
 

Ähnliche Themen

D
Antworten
17
Aufrufe
439
datNeMo
D
S
Antworten
0
Aufrufe
129
sorenn
S
R
  • RudolfHagen
Antworten
1
Aufrufe
662
koje71
koje71
Zurück
Oben Unten