dataframe icon indicating copy to clipboard operation
dataframe copied to clipboard

can't convert column to toLocalDateTime with format

Open devcrocod opened this issue 3 years ago • 2 comments

I miss this function:

df.convert("date_time").toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'")

devcrocod avatar Aug 09 '22 11:08 devcrocod

Hi! Do you have a sample of code that parses String to LocalDateTime using this format?

koperagen avatar Aug 09 '22 13:08 koperagen

val json = """{
    "name": "Petr",
    "date": "2000-13-21T15:27:49Z"
}"""

val df = DataFrame.readJsonStr(json)

then I try to convert a type of date to LocalDateTime using String API and I can convert with default local but can't with my local:

df.convert("date").toLocalDateTime() // works fine

df.convert("date").toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'") // missing toLocalDateTime fun

devcrocod avatar Aug 11 '22 10:08 devcrocod

@Jolanrensen please check

zaleslaw avatar Jun 12 '23 12:06 zaleslaw

This is intentional. The function you're looking for is defined like:

public fun <T, R : String?> Convert<T, R>.toLocalDateTime(
    pattern: String? = null,
    locale: Locale? = null,
): DataFrame<T> = to { it.convertToLocalDateTime(pattern, locale) }

and thus can only be called on String-typed columns, not Any columns. This means that this does work:

df.convert { "date"<String>() }.toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'")
// or
df.convert(column<String>("date")).toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'")

I don't think it's wise to open this up to columns of any type.

Jolanrensen avatar Jun 13 '23 10:06 Jolanrensen

Probably close, if won't fix?

zaleslaw avatar Jun 13 '23 17:06 zaleslaw

@zaleslaw if we all agree :) @koperagen what do you think?

Jolanrensen avatar Jun 14 '23 10:06 Jolanrensen

@Jolanrensen

df.convert { "date"<String>() }.toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'")

Will this also work for <String?>?

devcrocod avatar Jun 14 '23 10:06 devcrocod

@Jolanrensen

df.convert { "date"<String>() }.toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss'Z'")

Will this also work for <String?>?

I'd imagine yes, because of:

public fun <T, R : String?> Convert<T, R>.toLocalDateTime(

Jolanrensen avatar Jun 14 '23 10:06 Jolanrensen