WPF中TimeSpan的坑
记一次在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
分别更改时间戳不同部分,使其超过对应的最大值。
- 更改天大于30:转换前:30.12:25:45.555 转换后:True 30.12:25:45.5550000
- 更改小时大于12:转换前:2.23:25:45.555 转换后:True 02.23:25:45.5550000
- 更改小时大于24:转换前:2.25:25:45.555 转换后:False 00:00:00 失败
- 更改分钟大于60:转换前:2.12:75:45.555 转换后:False 00.00:00:00 失败
- 更改秒大于60:转换前:2.12:25:75.555 转换后:False 00.00:00:00 失败
- 更改毫秒大于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的坑的更多相关文章
- WPF中嵌入Skyline提供的COM组件填坑
网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充. 工具:Visual Studio 2017 1. ...
- 【WPF】 Timer与 dispatcherTimer 在wpf中你应该用哪个?
源:Roboby 1.timer或重复生成timer事件,dispatchertimer是集成到队列中的一个时钟.2.dispatchertimer更适合在wpf中访问UI线程上的元素 3.Dispa ...
- Silverlight和WPF中DataContractJsonSerializer对时间的处理差异
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com Silverlight脱胎于WPF,他们的行为不完全并不完全相同,DataContractJsonSerializ ...
- WPF中的动画——(三)时间线(TimeLine)
WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...
- WPF中timer的使用
Timer控件/ System.Timers.Timer 不能用于WPF中.在WPF中,定时器为 DispatcherTimer. 使用方法如下: private DispatcherTimer ti ...
- WPF中对三维模型的控制
原文:WPF中对三维模型的控制 (以下选自南开大学出版社出版的<WPF和Silverlight教程>) 3Dmax中的建模模型可以导出为obj文件格式,将此文件导入WPF项目中,由WPF完 ...
- WPF 中 DispatcherTimer 计时器
在 WPF 中涉及到界面操作的计时器时,一定要使用 DispatcherTime,DispatcherTimer是为 WPF 专门设计的,不然的话会提示界面资源被其他线程所拥有而无法更新界面.Disp ...
- WPF中的DoubleAnimation
原文:WPF中的DoubleAnimation WPF中的DoubleAnimation ...
- (转载)WPF中的动画——(一)基本概念
http://www.cnblogs.com/TianFang/p/4050845.html WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计 ...
随机推荐
- 哈工大计算机网络Week3-传输层
目录 学习目标 传输层服务概述 传输层服务和协议 传输层 vs. 网络层 Internet传输层协议 多路复用和多路分用 多路复用/分用 分用如何工作? 无连接分用(UDP) 面向连接的分用 面向连接 ...
- 9.18考试 第一题count题解
这道题说起来挺可惜的,当时纠结是用常数大但有可能减少递归层数的模还是用常数小但递归多的回溯纠结了好半天,最终错误的选择了模.导致T了20分,改成回溯就A了. 先分析一下性质,我在考试的时候打表发现在数 ...
- Stixel_World(single)学习笔记
1. 算法背景 Q: 如何有效处理数以百万的视差图数据(提供了每个像素的精确深度信息)? 以及如何在大量数据中找到所有相关的障碍物? 提出方法 “ stixel_world ”, It takes ...
- ISTQB TTA大纲中提到的参考书目
在2012版大纲(可以点击这里下载查看)第12页"2.2条件测试"标题上方有这样一句话: 参考[Bath08],[Beizer90],[Beizer95],[Copeland03] ...
- 通过windug判断某个模块导致程序不能退出。
1.windug附加进程. 2.~* kb 3.看堆栈
- CentOS 7.3 配置静态ip
镜像:CentOS-7-x86_64-DVD-1511.iso 1.修改.查看虚拟机的网段 1.1.查看虚拟机网段 编辑-> 虚拟机网络编辑器,修改的需要管理员权限 选择NAT模式 点击 NAT ...
- Excel催化剂开源第8波-VSTO开发之异步调用方法
在VSTO开发过程中,因其和普通的Winform开发有点差别,具体细节笔者也说不清楚,大概是VSTO的插件是寄生在Excel中,不属于独立的进程之类的,其异步方法调用时,未能如Winform那样直接用 ...
- 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字
序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...
- Shiro授权流程
1,授权中涉及的一些概念 [1]授权:访问控制,即在应用中认证用户能否访问的系统资源(如一个页面,一个按钮等). [2]资源:在Web应用中反应为用户可以访问的URL. ...
- 在springboot中使用swagger2
1.在springboot中使用swagger的话,首先在pom文件中引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/spri ...