我正在尝试使用 kotlin 更新 DateTime,以使其更加干净。我尝试过 let、with、apply 例如:
pickUpDate.apply {
pickUpDate.hourOfDay().setCopy(hour)
pickUpDate.minuteOfHour().setCopy(minutes)
pickUpDate.secondOfMinute().setCopy(0)
}
但没有成功。 唯一有效的似乎是:
pickUpDate = pickUpDate.hourOfDay().setCopy(10)
pickUpDate = pickUpDate.minuteOfHour().setCopy(0)
pickUpDate = pickUpDate.secondOfMinute().setCopy(0)
有什么想法我做错了什么吗?
最佳答案
看看这个:
val newDate = pickUpDate.hourOfDay().setCopy(hour)
.minuteOfHour().setCopy(minutes)
.secondOfMinute().setCopy(0)
或者更好:
fun DateTime.setDayTime(hourOfDay: Int? = null, minuteOfHour: Int? = null, secondOfMinute: Int? = null) {
var dateTime = this
if(hourOfDay != null) {
dateTime = dateTime.hourOfDay().setCopy(hourOfDay)
}
if(minuteOfHour != null) {
dateTime = dateTime.minuteOfHour().setCopy(minuteOfHour)
}
if(secondOfMinute != null) {
dateTime = dateTime.secondOfMinute().setCopy(secondOfMinute)
}
return dateTime
}
现在你可以做
val newDate = pickUpDate.setDayTime(hourOfDay = hour, minuteOfHour = minutes, secondOfMinute = 0)
您的示例不起作用的原因是 apply
返回当前日期,但每次调用 setCopy
都会创建一个新实例,因此日期是不可变的,并且实际上并没有改变原地。我想这就是 Joda-Time 决定反驳的观点:在一个地方更改日历不应影响任何其他地方。
关于android - 在 Kotlin 中是否有更干净的方法来设置日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50410500/