J'ai écrit du code pour vérifier deux dates, une date de début et une date de fin. Si la date de fin est antérieure à la date de début, une invite indique que la date de fin est antérieure à la date de début.
Je souhaite également ajouter une vérification pour savoir si la date de début est antérieure à aujourd'hui (aujourd'hui comme le jour où l'utilisateur utilise l'application). Comment dois-je procéder? (Code de vérification de la date ci-dessous, tout cela est également écrit pour Android si cela a une incidence)
if (startYear > endYear) {
fill = fill + 1;
message = message + "End Date is Before Start Date" + "\n";
} else if (startMonth > endMonth && startYear >= endYear) {
fill = fill + 1;
message = message + "End Date is Before Start Date" + "\n";
} else if (startDay > endDay && startMonth >= endMonth && startYear >= endYear) {
fill = fill + 1;
message = message + "End Date is Before Start Date" + "\n";
}
Est-ce que cela aide?
Calendar c = Calendar.getInstance();
// set the calendar to start of today
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
// and get that as a Date
Date today = c.getTime();
// or as a timestamp in milliseconds
long todayInMillis = c.getTimeInMillis();
// user-specified date which you are testing
// let's say the components come from a form or something
int year = 2011;
int month = 5;
int dayOfMonth = 20;
// reuse the calendar to set user specified date
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
// and get that as a Date
Date dateSpecified = c.getTime();
// test your condition
if (dateSpecified.before(today)) {
System.err.println("Date specified [" + dateSpecified + "] is before today [" + today + "]");
} else {
System.err.println("Date specified [" + dateSpecified + "] is NOT before today [" + today + "]");
}
Ne vous compliquez pas trop. Utilisez ce moyen simple. Importez DateUtils Java et appelez les méthodes suivantes qui renvoient un booléen.
DateUtils.isSameDay(date1,date2);
DateUtils.isSameDay(calender1,calender2);
DateUtils.isToday(date1);
Pour plus d'informations, reportez-vous à cet article DateUtils Java
Android a déjà une classe dédiée pour cela. Vérifiez DateUtils.isToday (long when)
Les autres réponses ignorent la question cruciale de fuseau horaire .
Les autres réponses utilisent des classes dépassées.
Les anciennes classes de date-heure regroupées avec les premières versions de Java sont mal conçues, déroutantes et gênantes. Évitez Java.util.Date/.Calendar et les classes connexes.
LocalDate
Pour les valeurs de date uniquement, sans heure et sans fuseau horaire, utilisez la classe LocalDate
.
LocalDate start = LocalDate.of( 2016 , 1 , 1 );
LocalDate stop = start.plusWeeks( 1 );
Sachez que tandis que LocalDate
ne fait pas stocker un fuseau horaire, déterminant une date telle que "aujourd'hui" nécessite un fuseau horaire. Pour un moment donné, la date peut varier dans le monde par fuseau horaire. Par exemple, un nouveau jour se lève plus tôt à Paris qu'à Montréal. Un moment après minuit à Paris, c'est encore "hier" à Montréal.
Si tout ce que vous avez est un offset-from-UTC , utilisez ZoneOffset
. Si vous avez un fuseau horaire complet (continent/région), utilisez alors ZoneId
. Si vous voulez UTC, utilisez la constante pratique ZoneOffset.UTC
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
La comparaison est facile avec les méthodes isEqual
, isBefore
et isAfter
.
boolean invalidInterval = stop.isBefore( start );
Nous pouvons vérifier si la date d'aujourd'hui est comprise dans cette plage de dates. Dans ma logique illustrée ici, j'utilise l'approche Half-Open où le début est inclus tandis que la fin est exclusif. Cette approche est courante dans le travail date-heure. Ainsi, par exemple, une semaine se déroule d'un lundi allant jusqu'au lundi suivant non compris.
// Is today equal or after start (not before) AND today is before stop.
boolean intervalContainsToday = ( ! today.isBefore( start ) ) && today.isBefore( stop ) ) ;
Interval
Si vous travaillez intensivement avec de telles périodes de temps, pensez à ajouter la bibliothèque ThreeTen-Extra à votre projet. Cette bibliothèque étend le cadre Java.time et constitue le terrain d'essai pour d'éventuels ajouts à Java.time.
ThreeTen-Extra comprend une classe Interval
avec des méthodes pratiques telles que abuts
, contains
, encloses
, overlaps
, etc.
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien hérité) gênant classes date-heure telles que Java.util.Date
, Calendar
, & SimpleDateFormat
.
Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes Java.time .
Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .
Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.*
Des classes.
Où obtenir les classes Java.time?
public static boolean isToday(Date date){
Calendar today = Calendar.getInstance();
Calendar specifiedDate = Calendar.getInstance();
specifiedDate.setTime(date);
return today.get(Calendar.DAY_OF_MONTH) == specifiedDate.get(Calendar.DAY_OF_MONTH)
&& today.get(Calendar.MONTH) == specifiedDate.get(Calendar.MONTH)
&& today.get(Calendar.YEAR) == specifiedDate.get(Calendar.YEAR);
}
En utilisant Joda Time cela peut être simplifié pour:
DateMidnight startDate = new DateMidnight(startYear, startMonth, startDay);
if (startDate.isBeforeNow())
{
// startDate is before now
// do something...
}
pour vérifier si une date est la date du jour ou non seulement vérifier les dates non incluses dans l'heure, alors prenez l'heure 00:00:00 et utilisez le code ci-dessous
Calendar c = Calendar.getInstance();
// set the calendar to start of today
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date today = c.getTime();
// or as a timestamp in milliseconds
long todayInMillis = c.getTimeInMillis();
int dayOfMonth = 24;
int month = 4;
int year =2013;
// reuse the calendar to set user specified date
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
// and get that as a Date
Date dateSpecified = c.getTime();
// test your condition
if (dateSpecified.before(today)) {
Log.v(" date is previou")
} else if (dateSpecified.equal(today)) {
Log.v(" date is today ")
}
else if (dateSpecified.after(today)) {
Log.v(" date is future date ")
}
J'espère que cela vous aidera ....
boolean isBeforeToday(Date d) {
Date today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
return d.before(today);
}
une autre façon de faire cette opération:
public class TimeUtils {
/**
* @param timestamp
* @return
*/
public static boolean isToday(long timestamp) {
Calendar now = Calendar.getInstance();
Calendar timeToCheck = Calendar.getInstance();
timeToCheck.setTimeInMillis(timestamp);
return (now.get(Calendar.YEAR) == timeToCheck.get(Calendar.YEAR)
&& now.get(Calendar.DAY_OF_YEAR) == timeToCheck.get(Calendar.DAY_OF_YEAR));
}
}
Je suppose que vous utilisez des nombres entiers pour représenter votre année, votre mois et votre jour? Si vous souhaitez rester cohérent, utilisez les méthodes Date.
Calendar cal = new Calendar();
int currentYear, currentMonth, currentDay;
currentYear = cal.get(Calendar.YEAR);
currentMonth = cal.get(Calendar.MONTH);
currentDay = cal.get(Calendar.DAY_OF_WEEK);
if(startYear < currentYear)
{
message = message + "Start Date is Before Today" + "\n";
}
else if(startMonth < currentMonth && startYear <= currentYear)
{
message = message + "Start Date is Before Today" + "\n";
}
else if(startDay < currentDay && startMonth <= currentMonth && startYear <= currentYear)
{
message = message + "Start Date is Before Today" + "\n";
}
Essaye ça:
public static boolean isToday(Date date)
{
return org.Apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date);
}
public static boolean itIsToday(long date){
boolean result = false;
try{
Calendar calendarData = Calendar.getInstance();
calendarData.setTimeInMillis(date);
calendarData.set(Calendar.HOUR_OF_DAY, 0);
calendarData.set(Calendar.MINUTE, 0);
calendarData.set(Calendar.SECOND, 0);
calendarData.set(Calendar.MILLISECOND, 0);
Calendar calendarToday = Calendar.getInstance();
calendarToday.setTimeInMillis(System.currentTimeMillis());
calendarToday.set(Calendar.HOUR_OF_DAY, 0);
calendarToday.set(Calendar.MINUTE, 0);
calendarToday.set(Calendar.SECOND, 0);
calendarToday.set(Calendar.MILLISECOND, 0);
if(calendarToday.getTimeInMillis() == calendarData.getTimeInMillis()) {
result = true;
}
}catch (Exception exception){
Log.e(TAG, exception);
}
return result;
}