zoukankan      html  css  js  c++  java
  • WPF中TimeSpan的坑

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

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

    1             var currentValue = "2.12:25:45.555";
    2             TimeSpan result;
    3             var success = TimeSpan.TryParse(currentValue, out result);
    4             Console.Write("转换前:"+currentValue);
    5             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"等进行字符串格式化。

     

  • 相关阅读:
    python爬虫实例——爬取歌单
    第一次接触稍大一点的项目有感——规范
    Ajax学习——ajax提交目的是返回刷新页面某个位置的内容
    C++ STL(标准模板库)的学习了解
    各高级编程语言分类分析
    ubuntu安装后中出现如下启动报错的错误
    解决GitHub下载慢的问题
    caffe的CPU编译需要更改的地方
    拐点处选择聚类K值
    python处理大规模数据时,出现memory
  • 原文地址:https://www.cnblogs.com/VueDi/p/10844162.html
Copyright © 2011-2022 走看看