Ich habe den folgenden Code für die Aufnahme eines Datums in Form einer Zeichenfolge yyyy-MM-dd HH:mm:ss
(UTC-Zeitzone) und die Umwandlung in EEEE d(st, nd, rd, th) MMMM yyyy HH:mm
(Standardzeitzone des Geräts).Datum analysieren und formatieren
Allerdings ist mein Problem mit der Art, wie ich es getan habe, der Code sieht chaotisch und ineffizient. Gibt es eine Möglichkeit, das zu erreichen, was ich möchte, ohne das gleiche Datum so oft zu bilden und zu analysieren, um es effizienter zu machen? Oder irgendwelche anderen Verbesserungen?
Vorzugsweise Android API-Ebene unterstützt 14.
String inputExample = "2017-06-28 22:44:55";
//Converts UTC to Device Default (Local)
private String convertUTC(String dateStr) {
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date temp = df.parse(dateStr);
df.setTimeZone(TimeZone.getDefault());
String local = df.format(temp);
Date localDate = df.parse(dateStr);
SimpleDateFormat outputDF1 = new SimpleDateFormat("EEEE ");
SimpleDateFormat outputDF2 = new SimpleDateFormat(" MMMM yyyy HH:mm");
return outputDF1.format(temp) + prefix(local) + outputDF2.format(temp);
} catch(java.text.ParseException pE) {
Log.e("", "Parse Exception", pE);
return null;
}
}
private String prefix(String dateStr) {
try {
SimpleDateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = outputDF.parse(dateStr);
SimpleDateFormat df = new SimpleDateFormat("d");
int d = Integer.parseInt(df.format(temp));
if(1 <= d && d <= 31) {
if(11 <= d && d <= 13)
return d + "th";
switch (d % 10) {
case 1: return d + "st";
case 2: return d + "nd";
case 3: return d + "rd";
default: return d + "th";
}
}
Log.e("", "Null Date");
return null;
} catch(java.text.ParseException pE) {
Log.e("", "Parse Exception", pE);
return null;
}
}
Ich stimme für das Schließen dieser Frage als Off-Topic, weil es auf [codereview.se] gehört. – shmosel
@smossel Vielen Dank, dass Sie darauf hingewiesen haben. Ich poste es dort – Dan
Sie müssen Ihren Code profilieren, um herauszufinden, was schlechte Leistung verursacht. Was den "unordentlichen" Teil anbelangt - nun, java.util.date APIs werden allgemein als "unordentlich" betrachtet, es gibt nicht viel, was Sie tun können. Refactor den Code, um Wege zu finden, um es sauberer zu machen. Stellen Sie sicher, dass Sie eine kugelsichere Suite von Komponententests haben, bevor Sie mit dem Refactoring beginnen. – Egor