MSDN上的定义:
DateTime 值类型表示值范围在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间 
写了个例子发现1582年1月5号-1月14号在DateTime是有效的。
是把以前的日期都转成现行的历法记录规则了吗?

解决方案 »

  1.   

    哦,谢谢 两位。TO yiming0755() 是偶的语文不好,没说清楚历史上,因为以前历法累计的误差,由教皇下令,从1582年1月5号后直接跳到1月14号号了。这十天就被称为丢失的十天。
      

  2.   

    这是真的么?Microsoft不会这么认为么?
      

  3.   

    可能把旧历改改了。不过我计划我的万年历在1582年1月5号前用旧历。后面新历。本来还想直接用MS的DateTime呢。只好自己写了。..
      

  4.   

    haha  ,楼上,如果发射卫星,要考虑润秒的了。
      

  5.   

    这个问题的处理方式自己处理这些日期,DateTime里面只记录1000年的时间,所以在1900以前的时间都是通过运算得出来的。个人理解。
      

  6.   

    My god.丢失的十天、润秒,够新鲜……
      

  7.   

    你考虑的东西太少了。
    http://www.cnnet.com/culture/calendar/gregorian.html
    如果你要考虑儒略历和格里历的转换,就要考虑你的万年历到底是使用在欧洲还是用在美洲,如果使用在美洲的某些州,就不用作这个转换。
    如果用在中国,就更不用转换了。
    如果要转换,参考
    http://rubycn.ce-lab.net/man/addlib/Date.html
      

  8.   

    // 中国人不甩它!!
    // 哈哈哈,我不晓得中国的历法里面有没有这回事哈,乱盖的。
    中国每朝每代都在改历法,所以使用年号——算错了不要紧,换个年号就行了19年7闰只是夏历(夏朝的历法)而已
    先秦至隋唐的历法沿革
    http://www.gf99.cn/book.asp?bookid=898&id=903
    宋元明清的历法沿革
    http://www.gf99.cn/book.asp?bookid=898&id=904
    到了现代
    规定每年冬至时重新观察天象
    再用天体物理学去推算农历
    这就是紫金山天文台的任务
      

  9.   

    >在这一页月历上,1—4表示儒略历日期;15-31表示格里历日期,这样,历史上就留下了 10天空白! 
    明明是两种历法,非要混在一块,笨!
    仔细看看.Net的帮助,里面有关于各种历法的参数设置。
      

  10.   

    看看这个,两个历法的转换:
    http://www.codeproject.com/cs/samples/hijrigregorianclass.asp
      

  11.   

    好像每个国家丢失的天数都不一样.而且每个国家改历法的时间不一样.
    西方原来有两个历法:Julian 和Gregorian .后来都统一使用Gregorian 历法,但转换的时间不同.英国是在1752所改用的Gregorian ,这一年,1752-9-2号的下一天是1752-9-14号. 可能就是因为避免处理这个问题的原因,SQL SERVER中时间类型支持的时间是从1753年开始的.
      

  12.   

    支持LZ,有些人有点急功近利,希望作出来的东西马上就能变成钱,LZ的研究精神和严谨态度让我佩服
      

  13.   

    顶,偶Java版路过的java里,直接保存日期,时间的util Date(sql Date, Timestamp)都没有保存类似信息,而在处理日历的Calendar的实现类GregorianCalendar里有public void setGregorianChange(Date date)方法,默认结果October 15, 1582开始废止儒略历,采用格利高里历。如楼上所言,假如由于圣公会的原因,英国晚开始使用公历,可以用这个来改。仔细想象也对,只有在推算某一天之前是哪天,某天是一年的第几天,这样的日历信息的时候,才有所谓的历法区分,而计算机中用以保留某一时刻的数据结构,通常都是一个整型数值,用以从某一标准时刻开始到此计时点的经过了多少单位标准时间,这个应该与历法本身无关。我臆测C#可能会与之类似
      

  14.   

    raozhiven(朗屹) ( ) 信誉:99    Blog  2006-11-9 15:46:10  得分: 0  
     
     
       
    My god.丢失的十天、润秒,够新鲜……  
     
    同感
      

  15.   

    我看还是不要跑题。对于楼主的问题:“DataTime有没处理历史上丢失的十天”我是这样认为的。首先,可以肯定的是 DataTime 根本没有丢失这十天,而且这十天也是的的确确存在的。因为,楼主把两套不同的历法混用,显然是不对的。既然 DataTime 采用的是新的历法,所以你在表示旧历法的时候要相应的减去10天就可以了,其实都是那一天。这就好比,今天阳历是2006年11月11日,而农历确是9月21日;如果我们一直都是按农历计算日期,突然明天改为用阳历计算日期,那么明天就是2006年11月12日,乍一看我们好像直接从9月21日跳到了11月12日,其实我们还是一天一天的过,谁也没多一天,谁也没少一天,生老病死的法则依然不会变!所以说,我们都别楼主给骗了,都是些哄小孩的游戏!
      

  16.   

    昨晚常用的数据类型,效率是第一位的。如果随便一个datetime类型都要处理这么多乱七八糟的事情,那全世界的计算机总共加起来,要浪费多少计算资源啊。
    另外,不管历法怎么变,生活还是在继续,地球还是在转,历法只是人类对自然规律的模拟,不要本末倒置
      

  17.   

    如果你用的是linux系统。你直接把系统的日历调到1582年1月看看。就是从1月5号后直接跳到1月14号的!!!
      

  18.   

    啊~~不对!!!上面的错了.在linux下面是用cal命令查1752年会发现少了十天.不 1582年下面是运行结果debian:~# cal 9 1752
       September 1752
    Su Mo Tu We Th Fr Sa
           1  2 14 15 16    // 2号后就是14号啦!
    17 18 19 20 21 22 23
    24 25 26 27 28 29 301582 二月,罗马教廷要求从 1582 年十月减去十天, 因此1852 年十月四日后面紧跟着就是十五日。 在意大利,波兰,葡萄牙和西班牙都这样处理了。 其他天主教国家也很快跟着这么做了,但是新教国家不愿意修改, 而且希腊等东正教国家直到20世纪初才修改。这个改革在英国及其殖民地(包括现在的 USA)在 1752年执行了。 这样 1752 年九月二日后面跟着 1752 年九月十四日。这就是为什么Unix-like系列的操作系统的cal生成如上面的输出.而1582年10月的输出是:
        October 1582
    Su Mo Tu We Th Fr Sa
        1  2  3  4  5  6
     7  8  9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30 31
      

  19.   

    CnPack组件包中的CnCalendar单元考虑到了这个情况,可供参考。
    http://www.cnpack.org左边最新组件包下载,解压后的Source\Common中,
    历法说明规则也可见网站文档中心的“CnCalendar 历法说明”
    该库涵盖的范围是公历节气干支生肖星座数九三伏出梅入梅日出日落和部分公历转农历计算。
      

  20.   

    My god.丢失的十天、润秒,够新鲜……
      

  21.   

    公元纪年从理论上来说,是不会丢失时间的,楼主说的只是历法的问题,不同的历法得到的结果可能就是不同的。就是说如果教皇下的这个命令,过了三天才传到某地,而他们已经过到了3号,怎么办?
    我想 DateTime 类型是不会去管这个东西的。再说了,中国不存在这个问题。
      

  22.   

    Delphi 1.0 的时候,TDateTime是0001开始的。后续版本都直接从1899了Borland还是比较严谨些.要么干脆不处理.要么就处理好.我准备自己写个DateTime了.具体细节还没想清楚.看了Delphi的实现方法,还是很受启发的.
    初次使用.net 
    天干地支是必然考虑的.还有地方时也会考虑.因为这个东西是给研究风水的用的.不能不谨慎.
      

  23.   

    http://www.cnpack.org/showdetail.php?id=452&lang=zh-cnCnCalendar 历法说明CnPack 开发网站 2006-09-09 14:53:51本文是 CnCalendar 单元所实现的历法的详细说明文档。CnCalendar.pas 位于 CVS 的 cnpackSourceCommon 下,是一历法计算函数库,同目录下的CnCalClass.pas 是基于 CnCalendar.pas 的历法计算类库。(注:该库涵盖的范围是公历节气干支生肖星座数九三伏出梅入梅日出日落和部分公历转农历计算。)