Avec la date d'aujourd'hui, je devrais avoir la première date et la dernière date du mois précédent. Je suis incapable de trouver une logique.
Par exemple, en passant 05/30/2012
, je devrais obtenir 04/01/2012
et 04/30/2012
.
Toute aide sera très appréciée. Merci.
Avec Calendar
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal
Date lastDateOfPreviousMonth = cal.getTime();
Voir
YearMonth.now().minusMonths( 1 ).atDay( 1 )
…et…
YearMonth.now().minusMonths( 1 ).atEndOfMonth()
Évitez les classes Java.util.Date et .Calendar fournies car elles sont notoirement gênantes. Utilisez plutôt le package Java.time dans Java 8 et versions ultérieures.
Le nouveau framework Java.time sous Java 8 ( Tutorial ) dispose de commandes à cet effet.
La classe bien nommée YearMonth
représente un mois de l'année, sans jour ni heure spécifiques. De là, nous pouvons demander le premier et le dernier jour du mois.
ZonedId zoneId = ZoneId.of( "America/Montreal" );
YearMonth yearMonthNow = YearMonth.now( zoneId );
YearMonth yearMonthPrevious = yearMonthNow.minusMonths( 1 );
LocalDate firstOfMonth = yearMonthPrevious.atDay( 1 );
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();
UPDATE: Le projet Joda-Time est maintenant en mode de maintenance , avec l'équipe conseillant la migration vers les classes Java.time . Voir Tutorial by Oracle .
Dans Joda-Time 2.8, utilisez la classe LocalDate
si vous ne vous souciez pas de l'heure.
LocalDate today = LocalDate.now( DateTimeZone.forID( "Europe/Paris" ) );
LocalDate firstOfThisMonth = today.withDayOfMonth( 1 );
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths( 1 );
LocalDate endOfLastMonth = firstOfThisMonth.minusDays( 1 );
La structure Java.time est intégrée à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes ennuyeuses héritées telles que Java.util.Date
, Calendar
, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode de maintenance , conseille de migrer 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 310 .
Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.*
classes.
Où obtenir les classes Java.time?
Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez trouver ici quelques classes utiles telles que Interval
, YearWeek
, YearQuarter
et more .
Utilisez JodaTime
DateMidnight now = new DateMidnight();
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1);
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1);
System.out.println(beginningOfLastMonth);
System.out.println(endOfLastMonth);
Sortie:
2012-04-01T00: 00: 00.000 + 02: 00
2012-04-30T00: 00: 00.000 + 02: 00
Explication: un objet DateMidnight est un objet Date sans information sur l'heure de la journée, ce qui semble être exactement ce dont vous avez besoin. Sinon, remplacez toutes les occurrences de DateMidnight par DateTime dans le code ci-dessus.
eh bien, vous pouvez créer un objet de calendrier, définir la date au premier jour du mois en cours (ce devrait être le premier: P), puis effectuer deux opérations: à partir de votre objet de calendrier, vous pouvez soustraire une période particulière. de temps, par exemple un mois (cela vous donnerait la première date du mois précédent, ou un jour, ce qui vous donnerait le dernier jour du mois précédent. Je ne l'ai pas essayé mais ce serait mes premiers pas.
Voudrais aussi ajouter quelque chose à la réponse de Jigar. Utilisez la classe DateFormat
pour obtenir la date dans le format que vous avez spécifié dans la question:
DateFormat df = DateFormat.getInstance(DateFormat.SHORT);
System.out.println(df.format(firstDateOfPreviousMonth));
System.out.println(df.format(lastDateOfPreviousMonth));
Sortie:
04/01/12
04/30/12
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date lastDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
public List customizeDate(String month, int year) {
List<String> list = new ArrayList<String>();
try {
String edates = null;
String sdates = null;
if (month.equals("JAN") || month.equals("MAR") ||
month.equals("MAY") || month.equals("JUL") ||
month.equals("AUG") || month.equals("OCT") ||
month.equals("DEC")) {
String s1 = "01";
String s2 = "31";
String sdate = s1 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s2 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
} else if (month.equals("APR") || month.equals("JUN") ||
month.equals("SEP") || month.equals("NOV")) {
String s3 = "01";
String s4 = "30";
String sdate = s3 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s4 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
} else {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("Leap year");
if (month.equals("FEB")) {
String s5 = "01";
String s6 = "29";
String sdate = s5 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd =
new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" +
sdates);
String endDate = s6 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s =
new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
}
} else {
System.out.println("Not a leap year");
String s7 = "01";
String s8 = "28";
String sdate = s7 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s8 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
}
}
list.add(edates);
list.add(sdates);
} catch (Exception e) {
System.err.println(e.getMessage());
}
return list;
}
}