日期格式的伟大革新--关于日期格式的压缩算法--减少月份占两位格的表示法

日期格式的伟大革新--关于日期格式的压缩算法--减少月份占两位格的表示法

                    原创:李均宇  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(mont

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值