【问题标题】:Convert string to TimeSpan doesn't work将字符串转换为 TimeSpan 不起作用
【发布时间】:2013-08-27 10:51:19
【问题描述】:

我正在尝试将字符串转换为 timeSpan,但我似乎做不到。

我正在使用 c++ 托管代码:

TimeSpan timeSpan;
if (TimeSpan::TryParse("01.55", timeSpan))
{  
  int minute = timeSpan.Minutes;
  int hours= timeSpan.Hours;
  //do some work here
}

TryParse 正在返回flase。 我做错了什么?

谢谢,

【问题讨论】:

    标签: timespan managed-c++


    【解决方案1】:

    时间格式错误,见MSDN TimeSpan::TryParse

    格式应为:[ws][-]{ d | d.hh:mm[:ss[.ff]] | hh:mm[:ss[.ff]] }[ws]

    或将您的示例缩写为 1:55 而不是 1.55。这是 1 小时55 分钟 的格式。您的符号是 days.hours,这也是错误的,因为一天只有 24 小时,因此 TimeSpan 允许最大值为 23。您的字符串仍然需要 :0:0,因此它形成 dd.hh:mm:ss 才能成功解析。

    【讨论】:

    • 由于解析器不容易在d(./:)hh处出现.:错误,您可以将String.Replace全部.转为:再解析。我认为语法很简单,所以我不会在这里解释它。如果没有,链接上有一个简单的示例,可以向您展示您需要知道的所有内容。
    • 所以我需要重新格式化字符串并将其连接到 ":0:0" 这样才能工作?
    • 只需使用yourXMLString = yourXMLString->Replace('.',':');,然后使用TimeSpan::TryParse(yourXMLString,timeSpan)。确保不要替换整个 xml 文件,因为您可以替换任何您不想修改的内容。
    • thx ,替换它工作。只是想不通一件事。当我使用“02:55”时,TimeSpan::TryParse 如何不“认为”“02”是天数?
    • 因为那些足够聪明的编程人员之前想到了这一点并对其进行了编程,因此它默认为hh:mm(如果您提供2个数字,以:分隔)。天数的默认格式是d.hh:mm,但如果您提供 4 个数字,全部用: 分隔,它就知道这些数字是dd:hh:mm:ss。虽然,在提供 ms 时,您必须将日期与. 分开,并且与 ms 相同,像这样dd.hh:mm:ss.ms 否则它将不起作用。如果这对你有帮助,我会很感激一个接受的问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2017-10-09
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多