diff --git a/datafusion/functions/src/datetime/to_unixtime.rs b/datafusion/functions/src/datetime/to_unixtime.rs index 6776981bc74a..265fa7b59c7d 100644 --- a/datafusion/functions/src/datetime/to_unixtime.rs +++ b/datafusion/functions/src/datetime/to_unixtime.rs @@ -108,9 +108,12 @@ impl ScalarUDFImpl for ToUnixtimeFunc { DataType::Int32 | DataType::Int64 | DataType::Null | DataType::Float64 => { args[0].cast_to(&DataType::Int64, None) } - DataType::Date64 | DataType::Date32 | DataType::Timestamp(_, None) => args[0] + DataType::Date64 | DataType::Date32 => args[0] .cast_to(&DataType::Timestamp(TimeUnit::Second, None), None)? .cast_to(&DataType::Int64, None), + DataType::Timestamp(_, tz) => args[0] + .cast_to(&DataType::Timestamp(TimeUnit::Second, tz), None)? + .cast_to(&DataType::Int64, None), #[allow(deprecated)] // TODO: migrate to invoke_with_args DataType::Utf8 => ToTimestampSecondsFunc::new() .invoke_batch(args, batch_size)? @@ -120,6 +123,7 @@ impl ScalarUDFImpl for ToUnixtimeFunc { } } } + fn documentation(&self) -> Option<&Documentation> { self.doc() } diff --git a/datafusion/sqllogictest/test_files/timestamps.slt b/datafusion/sqllogictest/test_files/timestamps.slt index b713008d2c3b..846a052ae36f 100644 --- a/datafusion/sqllogictest/test_files/timestamps.slt +++ b/datafusion/sqllogictest/test_files/timestamps.slt @@ -2872,6 +2872,16 @@ select to_unixtime('2020-09-08T12:00:00+00:00'); ---- 1599566400 +query I +select to_unixtime(arrow_cast(to_timestamp('2023-01-14T01:01:30'), 'Timestamp(Second, Some("+05:30"))')); +---- +1673638290 + +query I +select to_unixtime(arrow_cast(to_timestamp('2023-01-14T01:01:30'), 'Timestamp(Millisecond, None)')); +---- +1673658090 + query I select to_unixtime('01-14-2023 01:01:30+05:30', '%q', '%d-%m-%Y %H/%M/%S', '%+', '%m-%d-%Y %H:%M:%S%#z'); ----