Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Converting strings to date types is one of the most common tasks. Modern programming languages and libraries offer several ways to achieve this.
In this tutorial, we’ll explore some efficient ways to convert strings into various date types with Kotlin.
First, we’ll see how to parse strings to LocalDate and LocalDateTime types.
The LocalDate class has static parse methods to parse strings. The first method we’ll see takes one parameter that should follow the standard date format yyyy-MM-dd:
fun givenString_whenDefaultFormat_thenLocalDateCreated() {
val localDate = LocalDate.parse("2022-01-06")
Assertions.assertThat(localDate).isEqualTo("2022-01-06")
}
The second static method is an overloaded method that takes two parameters. In this case, the second parameter receives the date format of our String:
fun givenString_whenCustomFormat_thenLocalDateCreated() {
val localDate = LocalDate.parse("01-06-2022", DateTimeFormatter.ofPattern("MM-dd-yyyy"))
assertThat(localDate).isEqualTo("2022-01-06")
}
The LocalDateTime class defines the same two static methods to parse Strings but considers the time information. The one-parameter method receives Strings that should be in ISO_LOCAL_DATE_TIME format:
fun givenString_whenDefaultFormat_thenLocalDateTimeCreated() {
val localDateTime = LocalDateTime.parse("2022-01-06T21:30:10")
assertThat(localDateTime.toString()).isEqualTo("2022-01-06T21:30:10")
}
Similarly, as defined for LocalDate, the second method takes the format parameter for any other date-time pattern:
fun givenString_whenCustomFormat_thenLocalDateTimeCreated() {
val text = "2022-01-06 20:30:45"
val pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val localDateTime = LocalDateTime.parse(text, pattern)
Assertions.assertThat(localDateTime).isEqualTo("2022-01-06T20:30:45")
}
Sometimes, we need to work with the old API java.util.Date. Fortunately, since Kotlin has excellent compatibility with Java, we can use the SimpleDateFormat class.
Let’s see now how to convert Strings into Date objects of type java.util.Date.
First, we need to define the formatting object that we’ll use for the date pattern. Then, we’ll use it to parse the String:
fun givenString_whenParseDate_thenUtilDateIsCreated() {
val formatter = SimpleDateFormat("yyyy-MM-dd")
val text = "2022-01-06"
val date = formatter.parse(text)
Assertions.assertThat(formatter.format(date)).isEqualTo("2022-01-06")
}
LocalDate and LocalDateTime objects are timezone agnostic. However, if we need to work with specific time-zone dates, the class ZonedDateTime can be used to parse the Strings:
fun givenString_whenParseWithTimeZone_thenZonedDateTimeIsCreated() {
val text = "2022-01-06 20:30:45 America/Los_Angeles"
val pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z")
val zonedDateTime = ZonedDateTime.parse(text, pattern)
Assertions.assertThat(zonedDateTime.zone).isEqualTo(ZoneId.of("America/Los_Angeles"))
}
Similarly, java.util.Date can also provide the time zone information using the formatting object:
fun givenString_whenParseDateWithTimeZone_thenUtilDateIsCreated() {
val formatter = SimpleDateFormat("yyyy-MM-dd")
formatter.timeZone = TimeZone.getTimeZone("America/Los_Angeles");
val text = "2022-01-06"
val date = formatter.parse(text)
assertThat(formatter.format(date)).isEqualTo("2022-01-06")
}
In this tutorial, we’ve seen how to convert String objects into Date types using the Date-Time API with Kotlin. We also saw how to parse Strings with the java.util.Date API.