在Julia中,如何将DateFormat year设置为19,即2019?

在Julia中,如何将DateFormat year设置为19,即2019?,date,julia,Date,Julia,我有类似“19年1月17日”、“20年2月18日”的约会。当我尝试使用日期包日期(“19年1月17日”,“d-u-yy”)时,我得到了合理的0019-01-17。我可以做日期(“19年1月17日”,“d-u-yy”)+年份(2000年),但这会引入新错误的可能性(我将给出闰年的例子,但通常是有效的,尽管存在非常罕见的错误日期(“00年2月29日”,“d-u-yy”)+年份(1900年)) 是否有一种日期格式嵌入有关世纪的已知信息?如中所述,有多种启发式方法可将世纪指定给日期。我建议显式地使用he

我有类似“19年1月17日”、“20年2月18日”的约会。当我尝试使用
日期
日期(“19年1月17日”,“d-u-yy”)
时,我得到了合理的
0019-01-17
。我可以做
日期(“19年1月17日”,“d-u-yy”)+年份(2000年)
,但这会引入新错误的可能性(我将给出闰年的例子,但通常是有效的,尽管存在非常罕见的错误
日期(“00年2月29日”,“d-u-yy”)+年份(1900年)

是否有一种日期格式嵌入有关世纪的已知信息?

如中所述,有多种启发式方法可将世纪指定给日期。我建议显式地使用helper函数来处理它

const NOCENTURYDF = DateFormat("d-u-y")
"""
    parse_date(obj::AbstractString,
               breakpoint::Integer = year(now()) - 2000,
               century::Integer = 20)

Parses date in according to DateFormat("d-u-y") after attaching century information.
If the year portion is greater that the current year,
it assumes it corresponds to the previous century.
"""
function parse_date(obj::AbstractString,
                    breakpoint::Integer = year(now()) - 2000,
                    century::Integer = 20)
    # breakpoint = year(now()) - 2000
    # century = year(now()) ÷ 100
    @assert 0 ≤ breakpoint ≤ 99
    yy = rpad(parse(Int, match(r"\d{2}$", obj).match), 2, '0')
    Date(string(obj[1:7],
                century - (parse(Int, yy) > breakpoint),
                yy),
         NOCENTURYDF)
end
parse_date("17-JAN-19")
parse_date("29-FEB-00")

更简单、更安全的操作:
replace(str,r“-(\d\d)$”=>s“-20\1”)
。最好完全避免显式字符串索引。对于DateFormat,需要或假定结构为
dd-uu-yy
,这样索引将更容易中断,但也可以避免无声错误。还可以在函数中为日期格式添加断言。
替换(str,r“(?)?