-- 日期时间 -- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality,导致 rq sj xq dt ts 产出的候选项在所有词语的最后。 local formats = { date = { '%Y-%m-%d', '%Y/%m/%d', '%Y.%m.%d', '%Y%m%d', }, time = { '%H:%M', '%H:%M:%S' }, datetime = { '%Y-%m-%dT%H:%M:%S+08:00', '%Y%m%d%H%M%S' }, week = { '星期%s', '礼拜%s', '周%s' }, timestamp = { '%d' } } local function date_translator(input, seg, env) if not env.date then local config = env.engine.schema.config env.name_space = env.name_space:gsub('^*', '') env.date = config:get_string(env.name_space .. '/date') or 'rq' env.time = config:get_string(env.name_space .. '/time') or 'sj' env.week = config:get_string(env.name_space .. '/week') or 'xq' env.datetime = config:get_string(env.name_space .. '/datetime') or 'dt' env.timestamp = config:get_string(env.name_space .. '/timestamp') or 'ts' end local current_time = os.time() local yield_cand = function(type, text) local cand = Candidate(type, seg.start, seg._end, text, '') cand.quality = 100 yield(cand) end -- 日期 if (input == env.date) then for _, fmt in ipairs(formats.date) do yield_cand('date', os.date(fmt, current_time)) end yield_cand('date', os.date('%Y 年 %m 月 %d 日', current_time):gsub(' 0', ' ')) end -- 时间 if (input == env.time) then for _, fmt in ipairs(formats.time) do yield_cand('time', os.date(fmt, current_time)) end end -- 星期 if (input == env.week) then local week_tab = { '日', '一', '二', '三', '四', '五', '六' } for _, fmt in ipairs(formats.week) do local text = week_tab[tonumber(os.date('%w', current_time) + 1)] yield_cand('week', string.format(fmt, text)) end end -- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00) if (input == env.datetime) then for _, fmt in ipairs(formats.datetime) do yield_cand('datetime', os.date(fmt, current_time)) end end -- 时间戳(十位数,到秒,示例 1650861664) if (input == env.timestamp) then for _, fmt in ipairs(formats.timestamp) do yield_cand('timestamp', string.format(fmt, current_time)) end end -- -- 显示内存 -- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "") -- cand.quality = 100 -- yield(cand) -- if input == "xxx" then -- collectgarbage() -- local cand = Candidate("date", seg.start, seg._end, "collectgarbage()", "") -- cand.quality = 100 -- yield(cand) -- end end return date_translator