记一次在WPF中,在将格式为“DD.HH:mm:ss”字符串转换成TimeSpan时遇到的坑

如果字符串为:DD.HH:mm:ss,转换结果正确。例如:

             var currentValue = "2.12:25:45.555";
             TimeSpan result;
             var success = TimeSpan.TryParse(currentValue, out result);
             Console.Write("转换前:"+currentValue);
             Console.WriteLine("转换后:"+success + " "+ result.ToString());

以上输出结果:转换前:2.12:25:45.555转换后:True 2.12:25:45.555

分别更改时间戳不同部分,使其超过对应的最大值

  1. 更改天大于30:转换前:30.12:25:45.555 转换后:True 30.12:25:45.5550000
  2. 更改小时大于12:转换前:2.23:25:45.555 转换后:True 02.23:25:45.5550000
  3. 更改小时大于24:转换前:2.25:25:45.555 转换后:False 00:00:00 失败
  4. 更改分钟大于60:转换前:2.12:75:45.555 转换后:False 00.00:00:00 失败
  5. 更改秒大于60:转换前:2.12:25:75.555 转换后:False 00.00:00:00 失败
  6. 更改毫秒大于1000:转换前:2.12:25:45.5555 转换后:True 02.12:25:45.5550000 成功

问题:

对于毫秒数,我们知道1s=1000ms。当字符串中毫秒数超过1000时,会是什么情况。

如上测试可以看出,在ToString()时,毫秒位数为7位。超过其范围4位。最后四位是什么含义呢?答案:最后四位为纳秒有效数字位。(1ms=10000纳秒)

图1毫秒部分大于3位小于7位

如图1所示。转换前:2.12:25:45.125555  转换后:True 2.12:25:45.1255550 ,毫秒125

图2毫秒部分为7位

如图2所示。转换前:2.12:25:45.1255555  转换后:True 2.12:25:45.1255555  ,毫秒125

图3毫秒部分大于7位

如图3所示。转换前:2.12:25:45.125555555  转换后:False 转换失败

总结:

  • 字符串转TimeSpan时对各部分值的设定有严格的限制,超过限制值,其并不会将相应部分向高位进位。(如小时部分为26,它不会转换成一天2小时。
  • 字符串毫秒部分在转换时,它只截取前三位作为Milliseconds(毫秒)的有效部分,进行转换,截取接下来的四位为TimeSpane中的纳秒的值。即毫秒部分最多只能有7位,超过将转换失败(超限)。
  • TimeSpan可以用@"dd\.hh\:mm\:ss\.fff"等进行字符串格式化。

WPF中TimeSpan的坑的更多相关文章

  1. WPF中嵌入Skyline提供的COM组件填坑

    网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充. 工具:Visual Studio 2017 1.  ...

  2. 【WPF】 Timer与 dispatcherTimer 在wpf中你应该用哪个?

    源:Roboby 1.timer或重复生成timer事件,dispatchertimer是集成到队列中的一个时钟.2.dispatchertimer更适合在wpf中访问UI线程上的元素 3.Dispa ...

  3. Silverlight和WPF中DataContractJsonSerializer对时间的处理差异

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com Silverlight脱胎于WPF,他们的行为不完全并不完全相同,DataContractJsonSerializ ...

  4. WPF中的动画——(三)时间线(TimeLine)

    WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...

  5. WPF中timer的使用

    Timer控件/ System.Timers.Timer 不能用于WPF中.在WPF中,定时器为 DispatcherTimer. 使用方法如下: private DispatcherTimer ti ...

  6. WPF中对三维模型的控制

    原文:WPF中对三维模型的控制 (以下选自南开大学出版社出版的<WPF和Silverlight教程>) 3Dmax中的建模模型可以导出为obj文件格式,将此文件导入WPF项目中,由WPF完 ...

  7. WPF 中 DispatcherTimer 计时器

    在 WPF 中涉及到界面操作的计时器时,一定要使用 DispatcherTime,DispatcherTimer是为 WPF 专门设计的,不然的话会提示界面资源被其他线程所拥有而无法更新界面.Disp ...

  8. WPF中的DoubleAnimation

    原文:WPF中的DoubleAnimation WPF中的DoubleAnimation                                                         ...

  9. (转载)WPF中的动画——(一)基本概念

    http://www.cnblogs.com/TianFang/p/4050845.html WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计 ...

随机推荐

  1. 数字IC前后端设计中的时序收敛(一)前言

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 为了纪念,同时 ...

  2. Notepad++提升工作效率小技巧

    前言 简单的提升工具效率需求可以借助Notepad编辑器实现.以前也用Python/Shell开发过本文中提到的需求,现在发现其实没有必要.本文介绍一些工作中常见的可以通过"Notepad+ ...

  3. 十代雅阁广东车友群,雅阁广州车友群,深圳雅阁车友群,雅阁微信群、雅阁车友群、十代雅阁交流微信QQ群

    最近一直在关注第十代雅阁,不论是普通汽油版本还是油电混动版本都很不错,在网上看到很多评测文章和视频 后续都会整理发布到微信群中. 由于论坛发帖,博客发文都不是很方便,为了及时沟通,先创建了微信群,方便 ...

  4. java中几个常见的问题

    1.正确使用equals方法 Object的equals方法容易抛出空指针异常,应使用常量或确定有值的对象来调用equals方法 例如: //不能使用一个值为null的引用类型变量来调用非静态方法,否 ...

  5. 每日一问:View.getContext() 的返回一定是 Activity 么?

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 一般我们被问到这样的问题,通常来说,答案都是否定的,但一定得知道其中的原 ...

  6. MyBatis从入门到精通:第二章数据的创建与插入文件

    数据库表的创建: create table sys_user ( id bigint not null auto_increment, ), user_password ), user_email ) ...

  7. I/O:ByteBuffer

    ByteBuffer: static ByteBuffer allocate(int capacity) :分配一个新的字节缓冲区. static ByteBuffer allocateDirect( ...

  8. 【深搜(DFS)-例题-踏青】-C++

    描述 小白和他的朋友周末相约去召唤师峡谷踏青.他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地.草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都 ...

  9. 小白开学Asp.Net Core《二》

    小白开学Asp.Net Core<二> ——数据仓储层(Repositroy) 一.历史现象 在后端开发中,数据库操作是最频繁的,每一个开发人员都会接触,甚至不少开发人员每天的工作就是与数 ...

  10. Java emoji持久化mysql

    好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf-8字符集保存不了保存不了表情字符,这是为什么呢?因为普通的字符 ...