Я обнаружил очень странную проблему в Scala. Я пытался получить последний день прошлого месяца. Следующий рабочий лист показал правильный результат (в Scala месяц начинается с 0 (январь), поэтому мар - 2).
Однако, если я закомментирую последнюю строку слева, результаты будут следующими:
Я просто присвоил lastMonth переменную month. И lastMonth поменяли на 3!
Где я сделал не так?
Вот фрагмент кода:
import java.util.{Calendar, GregorianCalendar} // Get current time and the last date of last month
val now = Calendar.getInstance()
// test code
//now.set(Calendar.MONTH, Calendar.DECEMBER)
// get current year
val currYear = now.get(Calendar.YEAR)
// get current month, JANUARY is 0
val currMonth = now.get(Calendar.MONTH)
// back to last month
val lastMonthCalendar = now
// if this month is Dec, the YEAR would be automatically deducted by 1
lastMonthCalendar.add(Calendar.MONTH, -1)
lastMonthCalendar.getTime
val lastMonth = lastMonthCalendar.get(Calendar.MONTH)
val numDaysOfLastMonth = lastMonthCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)
lastMonthCalendar.set(Calendar.DATE, numDaysOfLastMonth)
lastMonthCalendar.getTime
var year = lastMonthCalendar.get(Calendar.YEAR)
var month = lastMonth
В любом случае вы должны использовать LocalDate, а не Calendar
Нет, в календаре 3 апреля. lastMonth должно быть 2
Calendar.APRIL будет 3. calendarInstance.get(Calendar.MONTH) будет 4.
Да, LocalDate работает, но почему Calendar не работает?
Но единственное различие между этими двумя частями - это финальная строка. Я просто присвоил значение переменной ...
lastMonth и month всегда имеют одно и то же значение ... И будет 3, потому что сейчас март, третий месяц ... нет будет два. Я не понимаю, что вы ищете, но примите мой ответ ниже, если это то, что вы хотите в коде
Для тех из нас, у кого старые глаза, кто забыл свои очки, не могли бы вы подытожить в тексте то, что показывают изображения?
Это не воспроизводится. Я получаю 2 для обеих переменных.
@ cricket_007 В классе календаря МЕСЯЦ начинается с 0. ЯНВАРЬ - 0, МАРТ - 2.




get the last day of last month
Это то, что вы хотите?
scala> import java.time.LocalDate
import java.time.LocalDate
scala> LocalDate.now().withDayOfMonth(1).minusDays(1)
res1: java.time.LocalDate = 2018-03-31
scala> res1.getDayOfMonth
res2: Int = 31
scala> res1.getMonth
res3: java.time.Month = MARCH
scala> res1.getMonthValue
res4: Int = 3
Спасибо! LocalDate действительно пригодится!
Ну
lastMonthэто апрель = 4-1 = 3 ... В чем проблема?