// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. use core::str; use std::sync::Arc; use arrow_array::*; use arrow_schema::*; #[test] fn test_export_csv_timestamps() { let schema = Schema::new(vec![ Field::new( "c1", DataType::Timestamp(TimeUnit::Millisecond, Some("Australia/Sydney".into())), true, ), Field::new("c2", DataType::Timestamp(TimeUnit::Millisecond, None), true), ]); let c1 = TimestampMillisecondArray::from( // 1555584887 converts to 2019-04-18, 20:54:47 in time zone Australia/Sydney (AEST). // The offset (difference to UTC) is +10:00. // 1635577147 converts to 2021-10-30 17:59:07 in time zone Australia/Sydney (AEDT) // The offset (difference to UTC) is +11:00. Note that daylight savings is in effect on 2021-10-30. // vec![Some(1555584887378), Some(1635577147000)], ) .with_timezone("Australia/Sydney".to_string()); let c2 = TimestampMillisecondArray::from(vec![Some(1555584887378), Some(1635577147000)]); let batch = RecordBatch::try_new(Arc::new(schema), vec![Arc::new(c1), Arc::new(c2)]).unwrap(); let mut sw = Vec::new(); let mut writer = arrow_csv::Writer::new(&mut sw); let batches = vec![&batch]; for batch in batches { writer.write(batch).unwrap(); } drop(writer); let left = "c1,c2 2019-04-18T20:54:47.378+10:00,2019-04-18T10:54:47.378 2021-10-30T17:59:07+11:00,2021-10-30T06:59:07\n"; let right = str::from_utf8(&sw).unwrap(); assert_eq!(left, right); }