在Julia中,如何将DateFormat year设置为19,即2019?
我有类似“19年1月17日”、“20年2月18日”的约会。当我尝试使用在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日”,“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“(?)?