Есть ли более чистый способ установить dateTime в Котлине? - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь обновить DateTime с помощью kotlin, чтобы сделать его еще чище.Я пытался, например, применить, например:

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)

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Проверьте это:

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 решила противостоять тому, что изменение Календаря в одном месте не должно влиять на другие места.

0 голосов
/ 18 мая 2018

Очевидно, что вы имеете дело с плавным API, поэтому вы должны использовать его так же, как и в Java.

pickupDate = pickupDate.hourOfDay().setCopy(10)
                       .minuteOfHour().setCopy(0)
                       .secondOfMinute().setCopy(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...