Я хочу отформатировать дату, теперь у нас есть только гггг, и я хочу получить ГГГГ-ММ-ДД

#julia #julian-date

#джулия #julian-дата

Вопрос:

Вот мой код:

 Dates.Year(div(19973,10)) # 1997 years
Dates.Month(round(mod(19973,10)*3)) # 9 months
  

все вышесказанное в порядке, но…

 Dates.lastdayofquarter(Date(Dates.Year(div(19973,10)),Dates.Month(round(mod(19973,10)*3)),1))
# MethodError: no method matching Int64(::Year)
Closest candidates are:
Int64(!Matched::Union{Bool, Int32, Int64, UInt32, UInt64, UInt8, Int128, #Int16, Int8, UInt128, UInt16}) at boot.jl:708,
Int64(!Matched::Ptr) at boot.jl:718,
Int64(!Matched::Float32) at float.jl:706,
...
Date(::Year, ::Month, ::Int64) at types.jl:368,
top-level scope at untitled-b0de772dbeef3476c50547132427f175:73
include_string(::Function, ::Module, ::String, ::String) at loading.jl:1088
  

Ответ №1:

Вот оно:

 julia> lastdayofquarter(Date(19973 ÷ 10, (19973 % 10)*3))
1997-09-30
  

Обратите внимание, что ÷ это целочисленное деление, % это оператор по модулю, а Date объект может быть создан путем передачи года и месяца.

Или другой однострочник, вдохновленный комментарием @phipsgabler:

 julia> lastdayofquarter(Date(divrem(19973, 10).*(1,3)...))
1997-09-30
  

Комментарии:

1. year, quarter = divrem(19973, 10) это красиво разбивается.