本人对各种算法感兴趣,喜欢做一些算法题。可能有朋友对古代时辰计时与现在时间换算感兴趣,我就设计了此一种算法。
关于古代的时间表达法,也就是十二时辰法,从子丑......亥十二个时辰计时由来以久,自古以来就用此法计时,但对每个时辰分几刻,有变迁,主要有十二时辰分百二十刻和分为一百刻两种。古代长期使用的是百刻制。明末西方天文学传入,到清朝确定每日九十六刻,每刻十五分钟,开始与世界通行时间接轨。
各分刻法对计时没什么差别,就是计数而已。
唐以前一个时辰分十刻或八刻,唐以后明确为八刻,每时辰前四刻为初,后四刻为正,如辰初一刻( 07:15 ),辰正二刻  ( 08:30 )。
时辰开始不满一刻为初,如申初初刻 ( 15:05 ) 。
作为民间计时几时几刻就行了,不需很精确。然对于天文地理大事,就需精确表达时间。对于历史研究和考古研究需了解此情况。
还有一较精确的分法,将一刻分为三,每份等于现在的5分钟,称为”字”,不满字为余。我就依此设计换算方法。不需要的可略去。

示例如下:

另外需要了解时辰是各地时间,对北京时有纬度差。
调整的公式是: 时辰起点+4*(Z-B) 分钟
        (   Z是北京中央经度,B是当地的经度。)
      如:天水时辰  =23点  +4*(120-105.7)分。
      得:23 +4 * 14.3 = 23+57.2 =23点57分12秒。
以北京时间来换算,北京是东经120度,当地经度是105.7度。
此公式用于地方时辰调整。

以下是算法测试的源码文档(供参考):
thansform ( ){    //古时时辰计时换算 int  tim[3] ;
 string hhs,kks,ffs,ccs ;     //预置字串
 string hh0s, mm0s ;
 string chh, hhk, hhf, wwf, mcs ;   //时刻分,名称
 string hhcz ;        //子时初,正
 string s1,s2,s3,s4;
   ccs="鸡鸣平旦日出食时隅中日中日昳晡时日入黄昏人定夜半" ;
   hhs=    "丑寅卯辰巳午未申酉戌亥子" ;
   kks=    "初刻一刻二刻三刻" ;
   ffs=    "一字二字三字四" ;

setDisplay (0);   
    clearOutput ( ) ;
     print "古时计时时辰换算示例:"  ;
    getTime(tim);    //getDate = today
     pickTime("输入时间:", tim);       //input rime
    hh0=tim[0] ;
    mm0=tim[1] ;
    print "  " ;
    chh=subString (hhs, (hh0+1)/2-1, 1) ;
    if (hh0-hh0/2*2==0) { hhcz="正" ;  }       
                      else{  hhcz="初" ;  }
    chh=chh+hhcz ;                   //时
    hhk=subString (kks, mm0/15*2, 2 ) ;   //刻

n=(mm0-mm0/15*15)/5 ;         //余数
   // hhf=subString (ffs, (n-1)*2, 2) ;       //分=字
   // if (n==0) hhf=" " ;
   // ns=mm0-mm0/15*15-n*5 ;   //余=分减刻减字
    //wwf=subString (ffs, (ns-1)*2, 1) ;
    //21 : 43   =>>  亥初二刻二字三

//  for (i=0; i<12 ; i++) {     //测试古时称谓
        //    s3=subString (hhs, i, 1 ) ;
         //   s2= s2+s3+"    " ;         }
         //print s2 ;       // test print  ccs$
         //print  ccs ;

hh0s=intToString (hh0) ;
         mm0s=intToString (mm0) ;
       if (mm0<10) mm0s="0"+mm0s ;
       if (mm0==0) hhk=" " ;

mcs=subString (ccs, (hh0+1)/2*2-2,  2) ;   //名称
    print "Input Time =  " +hh0s+" : "+ mm0s ;
    print "  " ;
    print "换算为古时计时:" ;
    print "   " ;
    print "    " + chh+hhk+hhf+wwf+"    "+mcs ;
    print "---------------------------------------------------" ;

//时辰计时转换为时钟时间
int ns, ns1 ;
       s1=chh+hhk ;      //输入时,分
       s2=subString (s1, 0, 1) ;
        for (i=0; i<12 ; i++) {
            s3=subString (hhs, i, 1 ) ;
          if(s3==s2) ns=i ;              }
       print "  " ;
       print "Input :  "+s1 ;
         hh0=ns*2+1 ;        //计算小时数
     s2=subString (s1, 1, 1) ;
         if (s2=="初") { ns=0 ; }else{ ns=1 ; }
         hh0=hh0+ns ;    //正加一小时
     s2=subString (s1, 2, 1) ;
         if (s2=="一") ns1=15 ;     //还原几刻的分钟数
         if (s2=="二") ns1=30 ;
         if (s2=="三") ns1=45 ;
     n=(mm0-mm0/15*15) ;    //原输入分的尾数
     mm0=ns1+n ;                     //计算分钟数
         hh0s=intToString (hh0) ;    //format
      if (hh0<10) hh0s="0"+hh0s ;
         mm0s=intToString (mm0) ;
      if (mm0<10) mm0s="0"+mm0s ;
      print "   " ;
      print "换算为现在时间:  ", hh0s, " : ", mm0s ;
           
}//时辰换算

古代时辰计时与现代时间换算相关推荐

  1. 时间换算-本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。

    本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时). 输入格式: 输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n ...

  2. php换算古代时间对照表查询,phpGrace 工具类库 - 日期时间换算类

    功能描述 日期时间换算,时间戳.时间差.过去时间计算. 部署说明下载 timer.php 部署到 phpGrace/tools 文件夹下. 使用说明 当前年份 currentYear()$timer  ...

  3. 习题9-1 时间换算

    习题9-1 时间换算 (15 分) 本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时). 输入格式: 输入在第一行中以hh:mm:ss的 ...

  4. 古代中国使用计算机工具叫什么,古代四大计时工具是什么

    中国古代的计时的仪器和工具分别是: 一.圭表:又称,日晷,日规.圭表中的"表"是一根垂直立在地面的标竿或石柱:"圭"是从表的跟脚上以水平位置伸向北方的一条石板. ...

  5. PTA - 时间换算

    时间换算 题目:本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时). 输入格式: 输入在第一行中以hh:mm:ss的格式给出起始时间,第 ...

  6. 浙江大学PTA C语言-实验9 结构程序设计 7-2 时间换算

    7-2 时间换算 (15分) 本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时). 输入格式: 输入在第一行中以hh:mm:ss的格式给 ...

  7. 中国大学MOOC-C程序设计(浙大翁恺)—— 时间换算

    时间换算(10分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小 ...

  8. 时间换算_只愿与一人十指紧扣_新浪博客

    1 时间换算(10分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如 ...

  9. c语言oj1124,程序设计入门——C语言 第2周编程练习 1时间换算(5分)

    1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

最新文章

  1. Android 你知道界面布局嵌套多少层之后会Crash吗
  2. 表达式计算 DataTable/DataRow/DataColumn Expression、JScript CodeDomProvider Eval
  3. const char*, char const*, char*const 的区别
  4. 使用jsp和tld实现javaweb开发
  5. 怎么用计算机把浓度转换成PH,ph换算(ph和氢离子浓度的换算计算器)
  6. Re: 从零开始的【comic spider】(序幕)
  7. 如何从S4HANA的销售订单找到对应的生产订单
  8. 人工神经网络——【BP】反向传播算法证明
  9. 【CodeForces - 349A】Cinema Line (贪心(其实不是贪心),乱搞)
  10. java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装
  11. PubMedQA生物医学研究问题解答数据集(2019)下载
  12. CDH(Cloudera)与hadoop(apache)对比
  13. 802.11 monitor模式
  14. 【大数据部落】(数据挖掘)如何用大数据做用户异常行为分析
  15. VScode字体超大怎么改回来?
  16. java网页保存成pdf_将网页转换为PDF
  17. python中seek方法_python文件操作及seek偏移详解
  18. Unity关于Oculus Quest2 基于XR Interaction Toolkit 基础开发 001-位置移动加旋转
  19. 流媒体学习之路——Google的新拥塞算法SQP详解(编写中)
  20. 如何将支付宝小程序迁移至微信/FinClip运行

热门文章

  1. Kaggle添加竞赛数据集到自己的kaggle notebook
  2. 转载 电容的ESR
  3. yota3墨水屏调节对比度_【YotaPhoneYOTA3评测】屏幕:背面墨水屏玩法太多样_YotaPhone YOTA 3_手机评测-中关村在线...
  4. TPS54331DDAR —— DCDC降压设计12V 至 5.00V @ 3A【电感电容选择计算】
  5. 使用assembly插件打包maven项目
  6. 专题总纲目录 管理类联考 MBA/MEM/MPA/MPACC总纲
  7. centos7用户和组相关命令
  8. c 自动打印的服务器,您必须手动重新启动 APPC 打印会话对 AS/400 时配置打印会话重试设置为无限主机集成服务器 2009 年...
  9. mmse评估量表_简易精神状态评价量表(MMSE量表)
  10. “无法删除数据库,因为该数据库当前正在使用“问题解决