Ich versuche, ein Datum im String-Format mit dem aktuellen Datum zu vergleichen. So habe ich es gemacht (habe nicht getestet, sollte aber funktionieren), verwende aber veraltete Methoden. Einen guten Vorschlag für eine Alternative? Vielen Dank.
P.S. Ich hasse es wirklich, Date-Sachen in Java zu machen. Es gibt so viele Möglichkeiten, dasselbe zu tun, dass Sie wirklich nicht sicher sind, welche die richtige ist, daher meine Frage hier.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
Ihr Code könnte auf reduziert werden
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
oder
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (System.currentTimeMillis() > strDate.getTime()) {
catalog_outdated = 1;
}
Sie können compareTo () verwenden.
Die CompareTo-Methode muss eine negative Zahl zurückgeben, wenn das aktuelle Objekt kleiner ist als anderes Objekt positive Zahl, wenn das aktuelle Objekt größer als .__ ist. anderes Objekt und Null, wenn beide Objekte gleich sind.
// Get Current Date Time
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm aa");
String getCurrentDateTime = sdf.format(c.getTime());
String getMyTime="05/19/2016 09:45 PM ";
Log.d("getCurrentDateTime",getCurrentDateTime);
// getCurrentDateTime: 05/23/2016 18:49 PM
if (getCurrentDateTime.compareTo(getMyTime) < 0)
{
}
else
{
Log.d("Return","getMyTime older than getCurrentDateTime ");
}
Beachten Sie, dass das richtige Format ("TT/MM/JJJJ") ist, bevor der Code funktioniert. "mm" bedeutet Minuten!
String valid_until = "01/07/2013";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = null;
try {
strDate = sdf.parse(valid_until);
} catch (ParseException e) {
e.printStackTrace();
}
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
Sie können eine Calendar
direkt aus einer Date
erstellen:
Calendar validDate = new GregorianCalendar();
validDate.setTime(strDate);
if (Calendar.getInstance().after(validDate)) {
catalog_outdated = 1;
}
Calendar toDayCalendar = Calendar.getInstance();
Date date1 = toDayCalendar.getTime();
Calendar tomorrowCalendar = Calendar.getInstance();
tomorrowCalendar.add(Calendar.DAY_OF_MONTH,1);
Date date2 = tomorrowCalendar.getTime();
// date1 is a present date and date2 is tomorrow date
if ( date1.compareTo(date2) < 0 ) {
// 0 comes when two date are same,
// 1 comes when date1 is higher then date2
// -1 comes when date1 is lower then date2
}
String date = "03/26/2012 11:00:00";
String dateafter = "03/26/2012 11:59:00";
SimpleDateFormat dateFormat = new SimpleDateFormat(
"MM/dd/yyyy hh:mm:ss");
Date convertedDate = new Date();
Date convertedDate2 = new Date();
try {
convertedDate = dateFormat.parse(date);
convertedDate2 = dateFormat.parse(dateafter);
if (convertedDate2.after(convertedDate)) {
txtView.setText("true");
} else {
txtView.setText("false");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
es gibt true ...__ zurück und Sie können auch vor und gleich mithilfe von date.vor und date.equal .. überprüfen.
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String str1 = "9/10/2015";
Date date1 = formatter.parse(str1);
String str2 = "10/10/2015";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2) < 0) {
System.out.println("date2 is Greater than my date1");
}
} catch (ParseException e1) {
e1.printStackTrace();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");
calendar1.setTime(date1);
calendar2.setTime(date2);
System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));
Vergleicht die durch diesen Kalender dargestellte Zeit mit der durch den angegebenen Kalender dargestellten Zeit.
Gibt 0 zurück, wenn die Zeiten der beiden Kalender gleich sind, -1, wenn die Zeit dieses Kalenders vor dem anderen liegt, 1, wenn die Zeit dieses Kalenders hinter dem anderen Kalender liegt.
Manchmal müssen wir eine Liste mit Daten erstellen, wie z
heute mit stunde
gestern mit gestern
andere Tage mit 23/06/2017
Dazu müssen wir die aktuelle Zeit mit unseren Daten vergleichen.
Public class DateUtil {
Public static int getDateDayOfMonth (Date date) {
Calendar calendar = Calendar.getInstance ();
Calendar.setTime (date);
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static int getCurrentDayOfMonth () {
Calendar calendar = Calendar.getInstance ();
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static String convertMillisSecondsToHourString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("HH: mm");
Return formatter.format (date);
}
Public static String convertMillisSecondsToDateString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("dd / MM / yyyy");
Return formatter.format (date);
}
Public static long convertToMillisSecond (Date date) {
Return date.getTime ();
}
Public static String compare (String stringData, String yesterday) {
String result = "";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH: mm: ss");
Date date = null;
Try {
Date = simpleDateFormat.parse (stringData);
} Catch (ParseException e) {
E.printStackTrace ();
}
Long millisSecond = convertToMillisSecond (date);
Long currencyMillisSecond = System.currentTimeMillis ();
If (currencyMillisSecond> millisSecond) {
Long diff = currencyMillisSecond - millisSecond;
Long day = 86400000L;
If (diff <day && getCurrentDayOfMonth () == getDateDayOfMonth (date)) {
Result = convertMillisSecondsToHourString (millisSecond);
} Else if (diff <(day * 2) && getCurrentDayOfMonth () -1 == getDateDayOfMonth (date)) {
Result = yesterday;
} Else {
Result = convertMillisSecondsToDateString (millisSecond);
}
}
Return result;
}
}
Sie können dieses Beispiel auch in GitHub und diesem post überprüfen.
konvertieren Sie das Datum in den Kalender und berechnen Sie dort Ihre Berechnungen. :)
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.geT(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH); //same as cal.get(Calendar.DATE)
Oder:
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
if (strDate.after(new Date()) {
catalog_outdated = 1;
}
Sie könnten es versuchen
Calendar today = Calendar.getInstance ();
today.add(Calendar.DAY_OF_YEAR, 0);
today.set(Calendar.HOUR_OF_DAY, hrs);
today.set(Calendar.MINUTE, mins );
today.set(Calendar.SECOND, 0);
und Sie können today.getTime()
verwenden, um den Wert abzurufen und zu vergleichen.
Zeit für die moderne Antwort.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Als ich diesen Code gerade ausgeführt habe, war die Ausgabe:
Katalog ist veraltet
Da es in allen Zeitzonen niemals das gleiche Datum ist, geben Sie LocalDate.now
eine explizite Zeitzone. Wenn Sie möchten, dass der Katalog in allen Zeitzonen gleichzeitig abläuft, können Sie ZoneOffset.UTC
angeben, sofern Sie die Benutzer darüber informieren, dass Sie UTC verwenden.
Ich verwende Java.time, die moderne Java-API für Datum und Uhrzeit. Die von Ihnen verwendeten Datum-Uhrzeit-Klassen, Calendar
, SimpleDateFormat
und Date
, sind alle schlecht entwickelt und zum Glück lange veraltet. Trotz des Namens steht ein Date
nicht für ein Datum, sondern für einen Zeitpunkt. Eine Konsequenz daraus ist: Obwohl heute der 15. Februar 2019 ist, ist ein neu erstelltes Date
-Objekt bereits after (also nicht gleich) ein Date
-Objekt aus der Analyse von 15/02/2019
. Das verwirrt einige. Im Gegensatz dazu ist das moderne LocalDate
ein Datum ohne Tageszeit (und ohne Zeitzone), so dass zwei LocalDate
s, die das heutige Datum darstellen, immer gleich sind.
Ja, Java.time funktioniert gut auf älteren und neueren Android-Geräten. Es erfordert mindestens Java 6.
org.threeten.bp
mit Unterpaketen importieren.Java.time
zuerst beschrieben wurde.Java.time
auf Java 6 und 7 (ThreeTen für JSR-310).Die Klassen Java.util.Date und .Calendar sind bekanntermaßen lästig. Vermeide sie. Verwenden Sie entweder Joda-Time oder das neue Java.time-Paket in Java 8.
Wenn Sie nur Datum ohne Uhrzeit wünschen, verwenden Sie die LocalDate-Klasse.
Das Abrufen des aktuellen Datums hängt von der Zeitzone ab. Vor Montréal läuft ein neues Datum in Paris vorbei. Geben Sie die gewünschte Zeitzone an und hängen Sie nicht von der Standardeinstellung der JVM ab.
Beispiel in der Joda-Zeit 2.3.
DateTimeFormat formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( "1/1/1990" );
boolean outdated = LocalDate.now( DateTimeZone.UTC ).isAfter( localDate );
Sie können validDate.setTime (strDate) .__ verwenden. Schauen Sie sich das Javadoc unter http://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Calendar an .html