日期格式的伟大革新--关于日期格式的压缩算法--减少月份占两位格的表示法
原创:李均宇 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))[