You need the Dates
standard library. Suppose you have the following ABC.csv
file:
datetime,x,y,z,w,n
2016-01-04T14:16:00Z,103.71,103.71,103.71,103.71,23300
You already know how to read it:
julia> using CSV
julia> csv = CSV.File("ABC.csv")
1-element CSV.File{false}:
CSV.Row: (datetime = "2016-01-04T14:16:00Z", x = 103.71, y = 103.71, z = 103.71, w = 103.71, n = 23300)
Notice that you can access a column using:
julia> csv.datetime
1-element PooledArrays.PooledVector{String, UInt32, Vector{UInt32}}:
"2016-01-04T14:16:00Z"
This format is not exactly the ISO format supported by default. You can convert it to a date time object using:
julia> using Dates
julia> DateTime(csv.datetime[1], "yyyy-mm-ddTHH:MM:SSZ")
2016-01-04T14:16:00
Now that we know how to convert a single entry of the column, we can use Julia's broadcast syntax to apply to all entries:
julia> DateTime.(csv.datetime, "yyyy-mm-ddTHH:MM:SSZ")
1-element Vector{DateTime}:
2016-01-04T14:16:00
You can then save the resulting column in a new table. In Julia the CSV.jl table is not the same as the most popular DataFrames.jl table. You can easily convert to it before you start your processing pipeline:
julia> using DataFrames
julia> csv |> DataFrame
1×6 DataFrame
Row │ datetime x y z w n
│ String Float64 Float64 Float64 Float64 Int64
─────┼─────────────────────────────────────────────────────────────────
1 │ 2016-01-04T14:16:00Z 103.71 103.71 103.71 103.71 23300
In summary, the following script can be used to convert the data:
using DataFrames
using Dates
using CSV
df = CSV.File("ABC.txt") |> DataFrame
df.datetime = DateTime.(df.datetime, "yyyy-mm-ddTHH:MM:SSZ")
You can find more information in the docstring ?DateTime
.
An alternative solution may exist where you inform CSV.jl of the correct type using the types
keyword option. Check the docstring ?CSV.File
.