2010-08-12 3 views
5

ich ein Reporting-Tools verwende, die nur eine Linie Ausdruck unterstütztnur ein Ausdruck Sie das Datum von gestern und am ersten Tag des Monats erhalten

von Beispiel ich das Datum von gestern

der Klasse erhalten möge Kalender hat ein Add-Methode, aber es gibt void zurück, so

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime() 

funktionierte nicht

nicht wissen, wie dieses erhalten getan

Dank

+2

Das gestrige Datum in welchem ​​Format? Als Kalenderobjekt? Als eine Schnur? Als ein util.Date? Als sql.Date? – Stephen

Antwort

2

wenn es wirklich ein Einzeiler muss sein, und es spielt keine Rolle, ob der Code verständlich ist, denke ich, die folgende Anweisung sollte funktionieren:

Date yesterday = new SimpleDateFormat("yyyyMMdd").parse(
    ""+(Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()))-1)); 

es formatiert die aktuelles Datum als "yyyyMMdd", z "20100812" für heute, analysiert es als Int: 20100812, subtrahiert eins: 20100811 und analysiert dann das Datum "20100811" mit dem vorherigen Format. Es wird auch funktionieren, wenn heute der erste eines Monats ist, da der 0. eines Monats von einem nachgiebigen DateFormat als letzter Tag des vorherigen Monats geparst wird.

Das Format "yyyyDDD" sollte auch funktionieren (D ist der Tag des Jahres).

Für den ersten Tag des laufenden Monats, können Sie einen ähnlichen Trick verwenden:

Date firstday = new SimpleDateFormat("yyyyMMdd").parse(
    new SimpleDateFormat("yyyyMM").format(new Date())+"01"); 
+0

@jarnbjo danke ~~ funktioniert gut – chun

+0

@jarnbjo Es tut mir leid, ich überprüfte die Frage und Ihre Antwort und fand heraus, dass ich das Problem völlig falsch verstanden hatte. Ihre Antwort ist 100% richtig. Keine harten Gefühle. Meine Kommentare ergaben keinen Sinn, also habe ich sie gelöscht. – vizog

4

Verwendung Joda-Time:

new org.joda.time.DateTime().minusDays(1).toDate(); 
+1

Sicher, joda wieder Zeit, aber wenn er auf Einzeiler beschränkt ist, bezweifle ich, dass er Drittanbieter-Bibliotheken enthalten kann. –

2

Kannst du nicht etwas tun, wie

new Date(new Date().getTime() - 86400000); 

die aktuelle Zeit zu erhalten, die Anzahl der Millisekunden an einem Tag subtrahieren, und baut eine Neues Datumsobjekt von diesem?

+3

Sollte mit 'System.currentTimeMillis()' anstelle von 'new Date(). GetTime()' auch funktionieren. –

+0

Guter Punkt. Besser, die Anzahl der Objekte zu reduzieren. –

+2

Die Logik ist falsch, da nicht alle Tage 86400000ms haben. – jarnbjo

1

Angenommen, Sie wollen ein java.util.Date Objekt (da Sie getTime() in Ihrer Frage verwendet, und dass gibt eine java.util.Date), könnten Sie tun:

// Get yesterday's date. System.currentTimeMillis() returns the 
// number of milliseconds between the epoch and today, and the 
// 86400000 is the number of milliseconds in a day. 
new Date(System.currentTimeMillis() - 86400000); 

Hoppla, nicht sehen, den ersten Tag des Monats Abfrage vor . Ich kam mit dem folgenden, um zu bekommen, dass mit util.Date, aber ich denke, das ist etwa die Zeit, die Sie verwenden möchten Joda oder Calendar ... (liebe SO, bitte nicht mich für die Entsetzlichkeit der folgenden abstimmen). ..)

// This will return the day of the week as an integer, 0 to 6. 
new Date(System.currentTimeMillis() - ((new Date().getDate()-1) * 86400000)).getDay(); 
0

Dies sollte getan werden, wie folgt:

Calendar cal = Calendar.getInstance(); 
cal .add(Calendar.DAY_OF_MONTH,-1); 
cal .getTime(); 

Wenn Sie tun dies:

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime() 

Sie fragen im Wesentlichen eine Methode (add()), die void zur Ausführungzurückgibt. Das kann nicht funktionieren.Diese

0

ist, was ich in Jasper verwenden:

// Today 
new java.util.Date().format('yyyy-MM-dd') 
// Yesterday 
new SimpleDateFormat("yyyy-MM-dd").format(new Date()-1) 

// First Day of current month 
new java.util.Date().format('yyyy') + "-" + new java.util.Date().format('MM') + "-01" 

Ich ziehe das ISO-Format YYYY-MM-DD zu verwenden, da überall erkannt wird und die regionale Format Verwirrung (dd/mm Position auf dem Datumsfeld) zu vermeiden.

Verwandte Themen