有个日期时间转换问题,用下面两种方式都出错了。。在添加秒数时。。说是“要添加的值超出范围。参数名: value”
 
 DateTime dt = new DateTime(1970, 1, 1);
 dt = dt.AddSeconds(Convert.ToDouble(s));
 dt = dt.ToLocalTime();//转换为当地时间,差8小时
 DateTime dt = new DateTime(1970, 1, 1);
 TimeSpan ts = TimeSpan.FromSeconds(s);
 dt = dt + ts;
 dt = dt.ToLocalTime();//转换为当地时间,差8小时这个输入的参数值s=2829271927304753 ,也没超过double的范围,不知道怎么回事,求高手指点迷津啊
——难道要把s分开加进去?因为s不大时,运行不会出错。

解决方案 »

  1.   

    用DateTime的最大值减去1970-1-1得到的是
    253402300800000
    而你的却是
    2829271927304753 
    都大了一个数量级了,怎么可能不超出范围?
      

  2.   

    你这是UNIX时间戳...Windows日历最大只支持到1万年减1秒,你要1万年以后干什么...
      

  3.   


    原来是这样 啊外部dll返回的秒数就是这么大
      

  4.   


    也就是说,那个秒数返回的是unix时间戳啊
      

  5.   

    unix 时间戳是毫秒级的  C#的 是100微秒级的
      

  6.   

    谢谢  s=2829271927304753  dll函数返回值说明时,说返回的是和1970间的秒数,这么大的秒数,难道是为妙
    我不太懂啊
      

  7.   

    C#是没有什么时间戳的概念的...如果是指Windows计时周期,那也是100纳秒,比微秒还低一个级别...带毫微秒的UNIX时间戳是double值,UNIX时间戳跟Windows计时周期也没任何关系...你这个值虽然是128位的,但是显然不是个有效的double值...你这参数哪儿来的?如果就这一个出错那就是源的问题,跟你这边没关系...你本来也应该对输入值限定合法的范围,超出范围抛异常...谁出错谁解决,别都揽在自己身上...
      

  8.   

    说得相当好啊。
    是个long型的数据,别人返回的。
    看来问题出在源头,我再问问