4 ms·
> Only other edge case is if someone takes a 2024-02-29 timestamp and modify the year part, without using date library to do so. Date library does not help her
by rfoo 3y ago
> Only other edge case is if someone takes a 2024-02-29 timestamp and modify the year part, without using date library to do so.
Date library does not help here, for example, both Python and Java's date library [0][1] have only "days" in their timedelta/Duration constructor. Month and year are ambiguous. What would you do if you want someone's birthday this year? The most obvious way:
birthday: datetime.date
birthday_this_year = birthday.replace(year=datetime.date.today().year)
is just broken. The second line throws.
[0] https://docs.python.org/3/library/datetime.html#datetime.timedelta https://docs.python.org/3/library/datetime.html#datetime.tim...
[1] https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html https://docs.oracle.com/javase/8/docs/api/java/time/Duration...
- javanonymous 3y agoThe Java library actually supports this case. It may not have the convenient "years" method directly, but you can add an arbitrary unit of time quite easily Example with duration: Duration.of(1, ChronoUnit.YEARS) Example with datetime: today.plus(2, ChronoUnit.YEARS) It even supports decades, centuries, eras and half days :-) For those curious about how it handles leap years: var leapDay = LocalDate.of(2024, 2, 29) leapDay.plus(1, ChronoUnit.YEARS); // ==> 2025-02-28 var lastYear = LocalDate.of(2023, 3, 1); lastYear.plus(1, ChronoUnit.YEARS); // ==> 2024-03-01 var lastFeb = LocalDate.of(2023, 2, 28); lastFeb.plus(1, ChronoUnit.YEARS); // ==> 2024-02-28 var firstFeb = LocalDate.of(2024, 2, 1); leapDay.with(TemporalAdjusters.lastDayOfMonth()); // ==> 2024-02-29
- rfoo 3y agoThanks! It does this according to doc: This method adds the specified amount to the years field in three steps: * Add the input years to the year field * Check if the resulting date would be invalid * Adjust the day-of-month to the last valid day if necessary TIL. I didn't know that Java had a builtin calendar (instead of datetime) library.