Reputation: 270
Part 1: I have date as string in the following format: "2020-10-15T22:54:54Z" I have to convert it into date object. Tried the following:
val dateString = "2020-10-15T22:54:54Z"
val dateFormatter = DateTimeFormatter.ofPattern("%Y-%m-%dT%H:%M:%SZ")
val updatedAtDate = LocalDate.parse(dateString, dateFormatter)
val today = LocalDateTime.now()
println("Updated At: $updatedAtDate")
Gives the following error: "Unknown pattern letter: T"
Part 2: Once I have the date object from above, I have to calculate the difference between today (Current Date) and the above date. How to do it in Kotlin?
Upvotes: 0
Views: 933
Reputation: 18578
… for the val dateString = "2020-10-15T22:54:54Z"
here, it is formatted in an ISO standard. Therefore, you can simply do this (if you want a LocalDate
, just year, month and day):
val thatDate: LocalDate = OffsetDateTime.parse(dateString).toLocalDate()
You can utilize a java.time.Period.between(LocalDate, LocalDate)
in order to calculate the difference between two LocalDate
s. You only have to make sure the older date is the first argument, otherwise you will get a negative result. Here's a full example:
import java.time.OffsetDateTime
import java.time.LocalDate
import java.time.Period
fun main(args: Array<String>) {
val dateString = "2020-10-15T22:54:54Z"
// create an OffsetDateTime directly
val thatDate = OffsetDateTime.parse(dateString)
// and extract the date
.toLocalDate()
// get the current day (date only!)
val today = LocalDate.now()
// calculate the difference in days and make sure to get a positive result
val difference = if (today.isBefore(thatDate))
Period.between(today, thatDate).days
else
Period.between(thatDate, today).days
// print something containing both dates and the difference
println("[$today] Updated At: $thatDate, difference: $difference days")
}
Output at Dec 10, 2021:
[2021-12-10] Updated At: 2020-10-15, difference: 25 days
Upvotes: 1