C#学习教程:给DateTime加秒,有效Double导致ArgumentOutOfRangeException1,0,0,0,0,DateTimeKind.Utc);双d=double.Parse("1332958778172");Console.Write(dt.AddSeconds(d));谁能告诉我这是怎么回事?我似乎无法弄清楚为什么......编辑这个值来自SalesforceRESTAPI,据我所知这是一个Unix纪元时间戳。“令牌发行时间,表示为自Unix纪元(1970年1月1日00:00:00UTC)以来的秒数。”解决方案事实上,在执行OAuth请求时,SalesforceRESTAPI会为issued_at字段发送毫秒数据,因为他们说他们正在发送秒数......正如其他人所说,问题是该值太大。阅读后,我相信它代表自Unix纪元以来的毫秒数,而不是秒数,因此您需要:DateTimedt=newDateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc);双d=double.Parse("1332958778172");//或者尽可能避免解析:)Console.Write(dt.AddMilliseconds(d));要么这样,要么在调用AddSeconds之前除以1000-但显然会丢失数据。您添加的值导致日期超出DateTime支持的有效日期范围。DateTime支持01/01/000100:00:00到31/12/999923:59:59。1332958778172/3600/24/365的简单计算得出42267年。我觉得double值真的太大了。它代表超过42,267年(如果我的数学是正确的),DateTime.MaxValue是23:59:59.9999999,1999年12月31日DateTimedt=newDateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc);控制台.Write(dt.AddSeconds(1332958778172D));除了...1332958778172/60/60/24/365=42,267年...哪个日期时间只能达到23:59:59.9999999,December31,1999我有一个类似的问题,我需要添加一个可配置的时间跨度到日期时间。如果配置不正确,我必须假设“最坏情况”:MaxValue。我通过实现DateTime的扩展(仍处于测试阶段)解决了这个问题:以上是C#学习教程:将秒数添加到DateTime并在ArgumentOutOfRangeException中产生有效的Double结果如果它对任何人有用并且需要了解更多关于C#学习,我将分享所有内容教程,希望大家多多关注——//////从日期中移除时间跨度,如果结果日期///落后于最小值/最大值,则返回MinValue或MaxValue而不是抛出异常/////publicstaticDateTimeSafeAdd(thisDateTimesource,TimeSpanvalue){//添加或删除?if(value.Ticks>0){//添加varmaxTicksToAdd=DateTime.MaxValue-source;如果(value.Ticks>maxTicksToAdd.Ticks)返回DateTime.MaxValue;}else{varmaxTicksToRemove=source-DateTime.MinValue;//获取要删除的无符号表示形式的值。//否定MinValues是不可能的,因为它会导致一个值大于MaxValue:(-32768..0..32767)varabsValue=value==TimeSpan.MinValue?TimeSpan.MaxValue:-value;如果(absValue.Ticks>maxTicksToRemove.Ticks)返回DateTime.MinValue;}返回源+值;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
