如您所见,它需要Calendar
数据类型作为输入。
我希望最长日期总是从当前时间开始一个月。我已经尝试过像这样
val now = Calendar.getInstance()
val currentYear: Int = now.get(Calendar.YEAR)
val currentMonth: Int = now.get(Calendar.MONTH)
val currentDay: Int = now.get(Calendar.DAY_OF_MONTH)
val oneMonthFromNow = now.add(Calendar.MONTH,1)
但是oneMonthFromNow
类型是unit
,而不是Calendar
数据类型。那么如何从当前日期时间动态添加一个月?
java或kotlin可以
首先要说的是不使用
Calendar
类,请改用LocalDateTime
。您将获得许多有关如何使用此类以及使用原因的文章。
即使您要使用Calendar类,也要说,如果有什么不起作用或不返回任何东西,您应该研究该类的实现。必须有一种解决您的问题的方法。这样可以增加您的知识以及调试技能。
因此,要解决您的问题,您需要像这样使用
val now = Calendar.getInstance()
// val currentYear: Int = now.get(Calendar.YEAR)
// val currentMonth: Int = now.get(Calendar.MONTH)
// val currentDay: Int = now.get(Calendar.DAY_OF_MONTH)
now.add(Calendar.MONTH,1) // Added one month
val oneMonthFromNow = now
// Or
// val oneMonthFromNow = now.clone()
// oneMonthFromNow.add(Calendar.MONTH,1)
now.add(Calendar.MONTH,1)
返回类型为单位,因为它正在更新您的now
日历
val now = Calendar.getInstance() // it return current calendar
val currentYear: Int = now.get(Calendar.YEAR)
val currentMonth: Int = now.get(Calendar.MONTH)
val currentDay: Int = now.get(Calendar.DAY_OF_MONTH)
//now calendar updated by 1 month
now.add(Calendar.MONTH,1)
//this will return your upcoming dates
val nextYear: Int = now.get(Calendar.YEAR)
val nextMonth: Int = now.get(Calendar.MONTH)
val nextDay: Int = now.get(Calendar.DAY_OF_MONTH)
Calendar c =
GregorianCalendar
.from(
LocalDate
.now(
ZoneId.systemDefault()
) // Returns a `LocalDate` object.
.plusMonths( 1 )
.atStartOfDay(
ZoneId.systemDefault()
) // Returns a `ZonedDateTime` object.
)
;
现代方法使用了几年前的java.time类,该类取代了可怕的传统日期时间类,例如Calendar
。
获取今天的日期。这需要一个时区。在任何给定时刻,日期都会在全球范围内变化。
ZoneId z = ZoneId.of( "Africa/Tunis" ;
或获取JVM的当前默认时区。
ZoneId z = ZoneId.systemDefault() ;
获取今天的日期。
LocalDate today = LocalDate.now( z ) ;
一个月后得到。
LocalDate monthLater = today.plusMonths( 1 ) ;
如果要与尚未更新的旧代码进行交互,请使用<< java.time,在旧类和现代类之间来回转换。
要进行转换,请通过ZonedDateTime
获得第一天。ZonedDateTime zdt = monthLater.atStaetOfDay( z ) ;
然后转换为也是GregorianCalendar
的Calendar
。
GregorianCalendar gc = GregorianCalendar.from( zdt ) ;