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"等进行字符串格式化。

     

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/VueDi/p/10844162.html
Copyright © 2011-2022 走看看