首页 > 解决方案 > 在 Julia 中将日期时间格式“1/22/20”转换为“2020-01-22”

问题描述

我想知道将日期时间格式“1/22/20”转换为“2020-01-22”的最佳方法是什么。我试过DateTime.(d1.date, "m/d/y")了,我觉得我在输出中遗漏了一些东西。有什么建议吗?

julia> first(d1, 10)
10×2 DataFrame
 Row │ date     value
     │ String   Int64
─────┼────────────────
   1 │ 1/22/20      1
   2 │ 1/23/20      1
   3 │ 1/24/20      2
   4 │ 1/25/20      2
   5 │ 1/26/20      5
   6 │ 1/27/20      5
   7 │ 1/28/20      5
   8 │ 1/29/20      6
   9 │ 1/30/20      6
  10 │ 1/31/20      8

julia> DateTime.(d1.date, "m/d/y")
519-element Vector{DateTime}:
 0020-01-22T00:00:00
 0020-01-23T00:00:00
 0020-01-24T00:00:00
 0020-01-25T00:00:00
 0020-01-26T00:00:00
 0020-01-27T00:00:00
 0020-01-28T00:00:00
 0020-01-29T00:00:00
 0020-01-30T00:00:00
 0020-01-31T00:00:00
 0020-02-01T00:00:00
 0020-02-02T00:00:00
 0020-02-03T00:00:00

标签: julia

解决方案


构造DateTime函数将字符串转换为日期时间。要转换回字符串(不同格式),请使用Dates.format

Dates.format.(DateTime.(d1.date, dateformat"m/d/y"), dateformat"yyyy-mm-dd")

由于您的年份只有两位数,因此它们被解释为 20 年而不是 2020 年。要解决此问题,您可以添加Dates.Year(2000)日期。

Dates.format.(DateTime.(d1.date, dateformat"m/d/y") .+ Dates.Year(2000), dateformat"yyyy-mm-dd")

您应该确保尽可能使用@dateformat_str宏来构造DateFormats,因为 to 的转换String非常DateFormat昂贵,并且使用宏来执行它意味着它只发生一次,在编译时(宏展开时)而不是每次数据框行。


推荐阅读