用编程来实现24小时制到12小时制的转换

2016-01-29 14:11 74 1 收藏

用编程来实现24小时制到12小时制的转换,用编程来实现24小时制到12小时制的转换

【 tulaoshi.com - Delphi 】

 
昨天有一位网友在群聊中提到了这个问题,晚上回去想了很久。花了三个小时,终于找到了解决的方法,现在拿出来与大家分享:
  
  首先想到的是TDateTimePicker控件有没有属性来实现这一功能的转换,因为这样做的好处不言而知。在我看了TDateTimePicker、

  TCommonCalendar这两个类的源码后得出了结论,不能用控件的属性或过程来实现这一转换。

  于是只好改变思路:

  我们知道,在Windows下可以修改时间的显示方式,具体方法如下:
  “控制面板”-“区域选项”(WINXP则是“日期与时间的显示方式”)-“时
  间”。在“时间格式”一栏中可以修改时间的显示格式,具的显示格式可在在“外观
  示例”中可以看到。
  现在可以知道“H:mm:ss”显示的是24小时制,而“tth:mm:ss”显示的则是12小时
  制。
  
  我们把“时间格式”设置为“tth:mm:ss”后再点击“确定”按钮退出。
  现在再来在窗体上放一个TDateTimePicker控件,OK,达到的预期的效果。
  
  刚准备舒一口气,又转念一想,程序到了别人的电脑那不是又不行了??
  看来,还得继续工作。
  
  我们知道Windows的系统设置一般都保存在注册表中。现在的关键是找到时间显示格式所保存的注册表主键。

  想一下,用的注册表搜索功能。
  我现在的系统时间是12小时制,它的显示格式是“tth:mm:ss”。好,就来搜索这个
  吧。终于找到了第一个,仔细思量一下,应该是的:主键是:
  HKEY_CURRENT_USERControlPanelInternational
  而其中的sTimeFormat键值名就是时间格式。
  但是,里边还有那么多的键值,要修改哪些呢?又是一个问题。

  想了一下,行,就用这个办法:

  1、导出主键
  2、在控制面板中把系统时间改为24小时制
  3、再导出主键
  4、运行两个记事体实例,分别打开刚才导出的主键(扩展名为.reg)
  5、比较,删除键值名和数据都相同的行


现在出来了结果:
  12小时制和24小时制有三个键值的数据不同
  键值名12小时频闹?4小时制的值
  iTime01
  iTimePrefix10
  sTimeFormatH:mm:sstth:mm:ss
  
  现在余下的问题就是如何编程序来实现了。
  Delphi对注册表的操作一般都是用TRegistry类来实现,具体的操作请参考相关资料。
  现在贴出其源码:
  
  unitSetTimeSotryUnit;
  
  interface
  
  uses
  Windows,Registry;
  
  Type
  Time_Story=(ts_12,{12小时制}
  ts_24{24小时制}
  );
  
  procedureSetTimeStory(constStory:Time_Story);
  functionGetTimeStory:Time_Story;
  
  implementation
  
  {---------------------------------------------------------------------------
  //
  //把系统时间的显示方式设置为指定类型
  //
  //参数:
  //Story:指定类型
  //
  --------------------------------------------------------------------------}
  procedureSetTimeStory(constStory:Time_Story);
  var
  Reg:TRegistry;
  begin
  Reg:=TRegistry.Create;
  {设置根主键为HKEY_CURRENT_USER}
  Reg.RootKey:=HKEY_CURRENT_USER;
  {打开主键'ControlPanelInternational'}
  Reg.OpenKey('ControlPanelInternational',False);
  Try{写入数据}
  CaseStoryof
  ts_12:{12小时制}
  begin
  Reg.WriteString('iTime','0');
  Reg.WriteString('iTimePrefix','1');
  Reg.WriteString('sTimeFormat','tth:mm:ss');
  end;
  ts_24:{24小时制}
  begin
  Reg.WriteString('iTime','1');
  Reg.WriteString('iTimePrefix','0');
  Reg.WriteString('sTimeFormat','H:mm:ss');
  end;
  end;
  Finally;
  Reg.CloseKey;{关闭主键}
  Reg.Free;
  end;
  end;
  

 {------------------------------------------------------------------------
  //
  //返回当前系统时间的显示方式
  //
  //返回值:
  //默认的返回为24小时制
  //
  -----------------------------------------------------------------------}
  functionGetTimeStory:Time_Story;
  var
  Reg:TRegistry;
  begin
  Result:=ts_24;
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_CURRENT_USER;
  Reg.OpenKey('ControlPanelInternational',False);
  Try
  ifReg.ReadString('sTimeFormat')='tth:mm:ss'then
  Result:=ts_12
  else
  Result:=ts_24

来源:https://www.tulaoshi.com/n/20160129/1492719.html

延伸阅读
准妈妈怀孕工作两不误 在怀孕期间坚持朝九晚五的作息时间,一部分准妈妈坦言是出于经济压力,“ 商家信奉‘孩子的钱最好赚’,我信奉‘要给孩子最好的’,怎么办?还是得努力上班呵。”另一部分准妈妈舍不得提前离开office的理由是,“忙惯了,从22岁一毕业就开始饱尝工作的苦乐,可以说,我的自信和成熟,都是拜工作所tulaoshi.com赐。乍一离...
什么是新生儿黄金24小时 第一声啼哭:宣告独立 新生宝宝的第一声啼哭,大多数时候被看成是一种宣言,他向妈妈、医生昭示着这个宝宝已经降临人世。医生通常会根据新生儿啼哭的声音大小、强弱来判断宝宝的健康状况,一般而言,足月儿哭声洪亮,早产儿则哭声较为微弱,有先天性心脏病或呼吸系统疾病的新生儿哭声则十分弱小。 ...
标签: 男人 男人养生
关爱荷尔蒙 男人24小时健康养护 我们体内的主要荷尔蒙种类多达五六十种,在一生27亿秒(以平均年龄85岁计)的时间长河中,它们维持着生命跌宕起伏的交响曲。为了持续享受它们无微不至的关怀,我们也要了解荷尔蒙的生物钟,给予它按时呵护。 7:00AM 聚集能量的最佳时段 也许他刚刚张开朦胧睡眼,但睾丸酮的分...
标签: 睡眠 睡眠常识
睡眠的时间历来是人们很关注的话题,但是,以前认为是睡的越多越好,但是,近些年来的研究发现,并不是睡的时间越长越好,因此网上引发了究竟是睡6小时好还是睡8小时好?开始研究睡6小时和睡8小时的区别。两者真的有区别吗?那区别又在哪里呢?我们一起来探讨一下。 睡6小时和8小时的区别 研究睡眠的时间,就会发现睡眠的长短...
《三国志12》24小时通关心得 三国志我应该算是骨灰玩家了三国志3开始到现在,任何一代都没拉下过,而且每代都以统一天下为责任。个人特别喜欢三国志5代和三国志九代。我个人简单来说重策越点。 三国志12终于发了,等了那么多年。怀着激动的心情展开我的统一之路。个人喜欢加入自己的角色,这样有带入感,速度建立一个全属性90的ID进入成都,从...

经验教程

49

收藏

15
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部