/
accessors.jl
39 lines (32 loc) · 1.06 KB
/
accessors.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# year upto attosecond
for (i,func) in enumerate(TIME_NAMES)
modname = (i <= 9 ? "Dates" : "CFTime")
@eval begin
"""
$($modname).$($func)(dt::AbstractCFDateTime) -> Int64
Extract the $($func) part of an `AbstractCFDateTime` as an `Int64`.
"""
function $func(dt::AbstractCFDateTime)
t = datetuple(dt)
if length(t) >= $i
return Int64(t[$i])
else
return Int64(0)
end
end
end
end
# Day, Hour, ... Nanosecond constructors from Dates.
# There is no Picosecond constructor in Dates.
for (i,name) in enumerate(TIME_NAMES[1:9])
function_name = Symbol(uppercasefirst(String(name)))
@eval begin
"""
Dates.$($name)(dt::AbstractCFDateTime) -> $($function_name)
The $($name) part of an `AbstractCFDateTime` as an `$($function_name)`.
"""
@inline function $function_name(dt::AbstractCFDateTime)
$function_name(Dates.$name(dt)) # years and months are special
end
end
end