android - 在 Kotlin 中是否有更干净的方法来设置日期时间

标签 android datetime kotlin

我正在尝试使用 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/

相关文章:

python - 从 python 数据框中获取唯一日期

android - 在 TextInputLayout 中使用 endIconMode 默认情况下启用结束图标(可见图标)

android - 如何在 Room 中存储自定义嵌套对象

android - 如何更改 Aviary for Android 给出的裁剪效果的顺序

java - 启动 map Activity 的正确方法?

java - DateTimeFormatter.format 与大陆/城市

datetime - 从人类可读格式转换日期

android - 静态类型语言中的生命周期方法

android - Android 上默认安装了哪些字体?

android - 每个设置的 OnPreferenceChangeListener