Vereinfachen Sie das Ersetzen des Datumsobjekts durch Strings "today" und "yesterday" in der statischen Java-Methode

8

Ich habe folgende Methode, die ich gerne kürzer oder schneller machen würde, wenn nichts anderes. Bitte alle Kommentare sind willkommen:

Die Balg-Methode nimmt ein Datumsobjekt, formatiert es ("EEE hh: mma MMM d, yyyy") und ermittelt dann, ob das Datum heute oder gestern ist und dann, wenn es so ist, "(Gestern | Heute) hh: mma "formatierte Zeichenfolge.

%Vor%     
Mat B. 27.11.2010, 14:34
quelle

9 Antworten

39

So können Sie es mit der Standard-API verbessern:

%Vor%

So könntest du es mit Jodatime machen:

%Vor%     
BalusC 27.11.2010, 15:05
quelle
3

Du hast "alle Kommentare willkommen" geschrieben, also benutze ich joda-time. :)

Ich bin ein Fan von Daten und Zeiten auf die kurze und intelligente Art und Weise der letzten Anrufe des iPhone (ähnlich wie bei Google Wave-Posts). Das ist "hh: mm" wenn heute, "gestern" oder Name des Wochentags wenn & lt; 7 Tage, sonst yyyy-MM-dd .

%Vor%

wo ich eine Reihe von SimpleDateFormat (wie weekdayFormat oben) verwende, um die Zeit zu den gewünschten Strings zu formatieren, und wo DateTime und DateMidnight joda-time-Klassen sind.

In diesen Fällen ist die Anzahl der verstrichenen Tage zwischen zwei DateTime: s weniger relevant als die Art, wie die Leute die Zeit definieren würden, die darüber spricht. Anstatt Tage zu zählen (oder Millisekunden, wie ich einige Leute gesehen habe), ist DateMidnight hier praktisch, obwohl andere Methoden genauso gut funktionieren würden. :)

    
JOG 09.05.2011 09:50
quelle
2

Eine weitere Möglichkeit, Daten mit java.util.Date.getTime () zu vergleichen, abgesehen von der oben angegebenen Antwort (Anmerkung: long sollte anstelle von int verwendet werden):

%Vor%

& lt;% = Tage% & gt; würde zurückgeben:

  

HEUTE

     

GESTERN

     

x Tage vorher

    
George 26.11.2013 09:40
quelle
2

Mein Verständnis der Frage ist eine einfache Methode zur Ausgabe wie folgt:

%Vor%

Der Code unten funktioniert für mich, aber ich bin neu bei Android und vielleicht könnten andere darauf hinweisen, wenn der Code nicht robust ist. Im Code unter 'timeLong' ist die Zeit meiner Ereignisse in der Epoche (Millisekunden).

%Vor%     
tmr 04.03.2015 09:31
quelle
2

dies für heute, gestern, morgen

%Vor%     
Fabio Guerra 04.09.2013 17:51
quelle
1

Schau dir jodatime an: Ссылка

Dies ist ein Beispielcode aus dem doc:

%Vor%     
Uberto 27.11.2010 15:06
quelle
1

Zeitzone

Die Frage und die anderen Antworten ignorieren das entscheidende Problem der Zeitzone. Dieser Eingabezeichenfolge fehlt eine Zeitzone oder Offset von UTC . Daher wird diese Zeichenfolge analysiert, während angenommen wird, dass sie in der aktuellen Standardzeitzone der JVM ein Datum-Uhrzeit-Datum darstellt. Riskantes Geschäft als (a) diese Annahme möglicherweise falsch ist, und (b) dass Standard kann jederzeit ändern, auch während Laufzeit.

Gebietsschema

Die Frage und andere Antworten ignorieren ein anderes entscheidendes Problem: Locale . Das Gebietsschema bestimmt die menschliche Sprache, die verwendet wird, um den Namen des Tages und den Namen des Monats während des Parsens (und des Generierens) aus der Eingabezeichenfolge zu übersetzen.

Wenn nicht angegeben, wird das aktuelle Standardgebietsschema der JVM für die Übersetzung verwendet. Genau wie bei der Zeitzone kann sich das Standard-Gebietsschema Ihrer JVM jederzeit ändern, sogar während der Laufzeit.

Geben Sie besser das gewünschte / erwartete Gebietsschema an.

java.time

Die Frage und die anderen Antworten verwenden die alten Datum-Zeit-Klassen, die sich als schlecht entworfen und mühsam erwiesen haben. Java 8 und höher hat das java.time -Rahmenwerk in deren Klassen die alten verdrängen.

Ihre Methode zum Analysieren einer Zeichenfolge beim Generieren einer neuen Zeichenfolge sollte in zwei Methoden aufgeteilt werden. Eine Methode sollte analysieren, um Datum-Uhrzeit-Objekte zu erhalten. Die Sekunde sollte Datum-Zeit-Objekte aufnehmen und die gewünschte String-Ausgabe generieren. Dann kann jeder einzeln verwendet werden. Und diese Herangehensweise führt uns davon ab, Strings als Datum-Zeit-Werte zu denken. Zeichenfolgen sind textuelle Darstellungen von Datums- und Uhrzeitwerten. Ihre Geschäftslogik sollte sich darauf konzentrieren, diese Datums- / Uhrzeitwerte als Objekte zu manipulieren und sich nicht auf Strings zu konzentrieren.

Parsen

%Vor%

Generieren

Wenn wir ein ZonedDateTime in der Hand von der obigen Methode übergeben, können wir eine textuelle Repräsentation seines Datum-Zeit-Wertes unter Verwendung eines spezifizierten Gebietsschemas für die Übersetzung von Name des Tages und Monatsname erzeugen.

Um zu bestimmen, ob die Datum-Uhrzeit für heute oder gestern ist, interessiert uns nur der Datumsteil ohne Tageszeit. Dafür können wir die LocalDate Klasse in java.time verwenden .

%Vor%

Beispiel

Üben Sie diese beiden Methoden aus.

Wählen Sie willkürlich eine Zeitzone von America/New_York , wie in der Frage nicht angegeben.

%Vor%

Übrigens können Sie java.time bitten, den Ausgabe-String automatisch entsprechend den kulturellen Normen des Gebietsschemas zu formatieren, anstatt ein Format hart zu codieren.

%Vor%

Dump zur Konsole.

%Vor%
  

Eingabe: Sa 11:23 AM 6. Februar 2016 | zdt: 2016-02-06T11: 23-05: 00 [Amerika / New_York] | Sofort: 2016-02-06T16: 23: 00Z | Ausgabe: Heute 11:23 Uhr | outputPerLocale: 6. Februar 2016 11:23:00

Übrigens schlage ich vor, einen Platz vor dem AM oder PM zu setzen, um das Lesen zu erleichtern.

    
Basil Bourque 06.02.2016 22:00
quelle
0

Dies ist eine erweiterte Version von Balus Implementierung von c.

Versuchen Sie dies, ich habe es mit joda-datatime2.2.jar und SimpleDateFormat

implementiert %Vor%

Einfache Fälle zur Verwendung und zum Testen der Util-Klasse:

%Vor%     
NarendraSoni 04.12.2014 06:03
quelle
0

Ich weiß, ich bin zu spät zu dieser Party. Aber ich habe die kürzeste Lösung für dieses Problem. Wenn Sie "Heute" oder "Gestern" basierend auf dem Datum anzeigen möchten, brauchen Sie nur um dies zu verwenden

%Vor% Das variable Datum

hier ist das Datum Objekt.

    
KishanSolanki124 22.12.2017 10:03
quelle

Tags und Links