#date #julia
Вопрос:
Я работаю в Джулии с кадрами данных и хочу отфильтровать некоторые столбцы даты и времени. Для этого мне нужен последний день месяца, предшествующего месяцу, когда выполняется задание с данными.
Например, если сегодняшняя дата Date("2021-07-21")
, я хотел бы получить 2021-06-30
.
Я все время делаю это в SQL с красным смещением, что выглядит примерно так:
select last_day(current_date - interval '1 month');
┌────────────┐
│ last_day │
├────────────┤
│ 2021-06-30 │
└────────────┘
Ответ №1:
Прежде чем я вспомнил проверить даты стандартной библиотеки Julia, я нашел какой-то веб-учебник, в котором упоминались только функции даты floor/ceil
:
using Dates
julia> floor(today(), Month) - Day(1)
2021-06-30
julia> typeof(ans)
Date
julia> floor(now(),Month) - Day(1)
2021-06-30T00:00:00
Это работает нормально, и я не вижу, как это может не сработать. Однако всегда отличные документы Julia описывают специальные функции для этого.
julia> lastdayofmonth(today() - Month(1))
2021-06-30
# maybe a leap year would cause a problem
julia> lastdayofmonth(Date("20200331","yyyymmdd") - Month(1))
2020-02-29
julia> lastdayofmonth(Date("20200229","yyyymmdd") Month(1))
2020-03-31
Есть много полезных функций, таких как firstdayofmonth()
, dayofweek()
, isleapyear()
. Похоже, все в порядке!
Изменить: арифметика даты должна быть внутри функции
Исправлена следующая ошибка, я вычитал месяц после нахождения последнего дня, работает в постгресе, но не в датах Юлии:
# WRONG, works only if prior month is shorter
lastdayofmonth(today()) - Month(1)
lastdayofmonth(Date("20210228", "yyyymmdd")) - Month(1)
2021-01-28
Комментарии:
1. Разве так не должно быть
lastdayofmonth(today() - Month(1))
? Обратите внимание на скобки в конце. См., например, результат,lastdayofmonth(Date("20200624", "yyyymmdd")) - Month(1)
2. ах! Спасибо @hckr, вы снова правы. Решение для редактирования.