Julia
has good documentation on dealing with Dates and Time, however that is often in the context constructing and Date and Time objects. In this post, I am focus on the ability to iterate over Dates and Times. This is very useful in countless application.
We start of by capturing this moment and moving ahead into the future
julia> this_moment=now() 2018-04-01T23:13:33.437
In one hour that will be
julia> this_moment+Dates.Hour(1) 2018-04-02T00:13:33.437
Notice that Julia
was clever enough properly interpret that we will be on the in another day after exactly one hour. Thanks to it multiple dispatch of the DateTime
type to be able to do TimeType period arithmatic.
You can then write a nice for
loop that does something every four hours for the next two days.
julia> for t=this_moment:Dates.Hour(4):this_moment+Dates.Day(2) println(t) #or somethings special with that time end 2018-04-01T23:13:33.437 2018-04-02T03:13:33.437 2018-04-02T07:13:33.437 2018-04-02T11:13:33.437 2018-04-02T15:13:33.437 2018-04-02T19:13:33.437 2018-04-02T23:13:33.437 2018-04-03T03:13:33.437 2018-04-03T07:13:33.437 2018-04-03T11:13:33.437 2018-04-03T15:13:33.437 2018-04-03T19:13:33.437 2018-04-03T23:13:33.437
Often we are not so interested in the full dates. For example if we are reading a video file and we want to get a frame every 5 seconds while using VideoIO.jl
. We can deal here with the simpler Time
type.
julia> video_start=Dates.Time(0,5,20) 00:05:20
Here we are interested in starting 5 minutes and 20 seconds into the video.
Now we can make a nice loop from the start to finish
for t=video_start:Dates.Second(5):video_start+Dates.Hour(2) h=Dates.Hour(t).value m=Dates.Minute(t).value s=Dates.Second(t).value ms=Dates.Millisecond(t).value # Do something interesting with ffmpeg seek on the video end