日期格式的伟大革新--关于日期格式的压缩算法--减少月份占两位格的表
发表时间:2023-01-10 03:37:06 更新时间:2023-01-10 07:00:01
楼主:myvbvc
时间:2023-01-09 19:37:06
日期格式的伟大革新--关于日期格式的压缩算法--减少月份占两位格的表示法
原创:李均宇 2023-01-09于吴川梅菉 2123-09
众所周知,日期格式通用表示法是,四位年份,两位月份,两位日期
忽发奇想,这可不可以更加简化呢?忽然发现,果然是可行的!!!
因为,世纪数,当前不是19就是20,而月份,仅12个,将月份与世纪数全并,是可行的。
算法:
1,如果世纪数的第一位是2,表是是20,世纪数减2即是月份数,如果世纪数的开头是3,表示也是世纪数20,一样世纪数减2即是月份数
2,如果世纪数的第一位是1,表示是19,世纪数尾数减9,就是月份数,如果世纪数第一位是0,表示是19,世纪数尾数减9,得到个位数,再加一个十位数,就表示月份
3,如果世纪数开头数字是4,5,表示是18的,为4,则减8,为5,则减8后再加一个十位数
4,如果世纪数开头数字是6,7,表示是21,为6,尾数减1,为月份数,为7,尾数减1后加一个十位数,为月份数
5,如果世纪数开头数字是8,9,表示是22,以此类推
举例:
1,2023-01-09-->2123-09-->20...01 2023-11-09-->3123-09-->2023-11
2, 1923-01-09-->1023-09-->19...01 1923-11-09-->0023-09-->1923-01
3, 1823-01-09-->4923-09-->18...01 1823-11-09-->5923-09-->1823-11
4,2123-01-09-->6223-09-->21...01 2123-11-09-->7223-09-->2123-11
5,2223-01-09-->8323-09-->22...01 2223-11-09-->9323-09-->2223-11
这种方法可以表示五百年,可以将日期减少两格,估计应用量数以亿计,应用量是天文单位,是历史性的巨大革新,甚至用于身份证号码
这种表示法,可以用于日期,但用于时间,就行不通了,将小时与分钟用此算法,无法压缩。
下面的代码已经在pascal中测试通过,如果要反向解析,也不是难事,时间紧,暂不理会了。且算法字头可以自行另设的。
procedure TForm1.Button1Click(Sender: TObject);
var
y1, y2, y3, y4, month1, month2, day: string;
y12, y34, y1_temp, y2_temp: string;
begin
y1 := edit1.Text[1];
y2 := edit1.Text[2];
y3 := edit1.Text[3];
y4 := edit1.Text[4];
month1 := edit2.Text[1];
month2 := edit2.Text[2];
day := edit3.Text;
y34 := y3 + y4;
///18
if y1 + y2 = '18' then
begin
if month1 = '0' then
begin
y1_temp := '4';
y2_temp := inttostr(8 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '5';
y2_temp := inttostr(8 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///18
///19
if y1 + y2 = '19' then
begin
if month1 = '0' then
begin
y1_temp := '1';
y2_temp := (inttostr(9 + strtoint(month2)))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '0';
y2_temp := inttostr(9 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///19
///20
if y1 + y2 = '20' then
begin
if month1 = '0' then
begin
y1_temp := '2';
y2_temp := inttostr(0 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '3';
y2_temp := inttostr(0 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///20
///21
if y1 + y2 = '21' then
begin
if month1 = '0' then
begin
y1_temp := '6';
y2_temp := inttostr(1 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '7';
y2_temp := inttostr(1 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///21
///22
if y1 + y2 = '22' then
begin
if month1 = '0' then
begin
y1_temp := '8';
y2_temp := inttostr(2 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '9';
y2_temp := inttostr(2 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///22
showmessage(y12 + y34 + '-' + day);
end;
原创:李均宇 2023-01-09于吴川梅菉 2123-09
众所周知,日期格式通用表示法是,四位年份,两位月份,两位日期
忽发奇想,这可不可以更加简化呢?忽然发现,果然是可行的!!!
因为,世纪数,当前不是19就是20,而月份,仅12个,将月份与世纪数全并,是可行的。
算法:
1,如果世纪数的第一位是2,表是是20,世纪数减2即是月份数,如果世纪数的开头是3,表示也是世纪数20,一样世纪数减2即是月份数
2,如果世纪数的第一位是1,表示是19,世纪数尾数减9,就是月份数,如果世纪数第一位是0,表示是19,世纪数尾数减9,得到个位数,再加一个十位数,就表示月份
3,如果世纪数开头数字是4,5,表示是18的,为4,则减8,为5,则减8后再加一个十位数
4,如果世纪数开头数字是6,7,表示是21,为6,尾数减1,为月份数,为7,尾数减1后加一个十位数,为月份数
5,如果世纪数开头数字是8,9,表示是22,以此类推
举例:
1,2023-01-09-->2123-09-->20...01 2023-11-09-->3123-09-->2023-11
2, 1923-01-09-->1023-09-->19...01 1923-11-09-->0023-09-->1923-01
3, 1823-01-09-->4923-09-->18...01 1823-11-09-->5923-09-->1823-11
4,2123-01-09-->6223-09-->21...01 2123-11-09-->7223-09-->2123-11
5,2223-01-09-->8323-09-->22...01 2223-11-09-->9323-09-->2223-11
这种方法可以表示五百年,可以将日期减少两格,估计应用量数以亿计,应用量是天文单位,是历史性的巨大革新,甚至用于身份证号码
这种表示法,可以用于日期,但用于时间,就行不通了,将小时与分钟用此算法,无法压缩。
下面的代码已经在pascal中测试通过,如果要反向解析,也不是难事,时间紧,暂不理会了。且算法字头可以自行另设的。
procedure TForm1.Button1Click(Sender: TObject);
var
y1, y2, y3, y4, month1, month2, day: string;
y12, y34, y1_temp, y2_temp: string;
begin
y1 := edit1.Text[1];
y2 := edit1.Text[2];
y3 := edit1.Text[3];
y4 := edit1.Text[4];
month1 := edit2.Text[1];
month2 := edit2.Text[2];
day := edit3.Text;
y34 := y3 + y4;
///18
if y1 + y2 = '18' then
begin
if month1 = '0' then
begin
y1_temp := '4';
y2_temp := inttostr(8 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '5';
y2_temp := inttostr(8 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///18
///19
if y1 + y2 = '19' then
begin
if month1 = '0' then
begin
y1_temp := '1';
y2_temp := (inttostr(9 + strtoint(month2)))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '0';
y2_temp := inttostr(9 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///19
///20
if y1 + y2 = '20' then
begin
if month1 = '0' then
begin
y1_temp := '2';
y2_temp := inttostr(0 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '3';
y2_temp := inttostr(0 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///20
///21
if y1 + y2 = '21' then
begin
if month1 = '0' then
begin
y1_temp := '6';
y2_temp := inttostr(1 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '7';
y2_temp := inttostr(1 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///21
///22
if y1 + y2 = '22' then
begin
if month1 = '0' then
begin
y1_temp := '8';
y2_temp := inttostr(2 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
if month1 = '1' then
begin
y1_temp := '9';
y2_temp := inttostr(2 + strtoint(month2))[2];
y12 := y1_temp + y2_temp;
end;
end;
///22
showmessage(y12 + y34 + '-' + day);
end;
大家都在看
- 《生死门》多人有声广播剧上线,诚邀涯友们前来捧场!
- 中国掌握了核心技术, 智能电动汽车会象手机一样占领全球
- 实修者,实时观真实灵界之事。
- 古典仙侠,传统文风《寅天传奇》(非搞笑爽文,努力编个好故事)
- 想上山当个小道士
- 求天涯的各位大师解卦,
- 关于神界图书馆的学习任务,请教一下各位大仙。
- 短篇文言小说《少昊传》
- 短篇文言小说《少昊传》
- 实修者,实时观真实灵界之事。
猜你喜欢
- Mogafx 澳元技术分析
- 美国在考虑支援乌克兰射程150km导弹
- 春节想一个人去旅行
- 美国登月火箭,再次发生泄露,被迫推迟,美国人纷纷质疑,阿波罗是假的了。
- 《永遇乐 彭城夜宿燕子楼》:古今如梦,何曾梦觉
- 五律 夏晚登乐游原
- 揭秘时尚闪耀的珠宝定制首饰的工艺流程
- 这什么又要审核
- 康雅吉丽影视化妆学员参与奇幻轻喜新武侠剧《鸣鸿传》工作
- 我不反对洋节,中国古代盛唐人,甚至思想比现在很多人超前