首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将3位数字输入解析为TimeSpan

将3位数字输入解析为TimeSpan
EN

Stack Overflow用户
提问于 2016-06-03 16:34:24
回答 2查看 448关注 0票数 0

用户输入是555,我希望它是05:55:00 (TimeSpan)。如何将其转换为TimeSpan?什么格式?

代码语言:javascript
运行
复制
var a = TimeSpan.ParseExact(/*user input string*/"5:55", new string[] { "%h\\:mm" }, CultureInfo.InvariantCulture);//OK output {05:55:00}
var b = TimeSpan.ParseExact(/*user input string*/"1111", new string[] { "%hmm" }, CultureInfo.InvariantCulture);//OK output {11:11:00}
var c = TimeSpan.ParseExact(/*user input string*/"555", new string[] { "%hmm", "hmm", "hhmm"}, CultureInfo.InvariantCulture);//Exception! None format works.

编辑:在细节上,我想格式化用户字符串输入到小时和分钟,hh:mm。用户输入字符串:

  • "5“将于05:00
  • "12“改为12:00
  • "1111“改为11:11
  • " 12:12“改为12:12
  • " 4:44“改为4:44
  • 一个不工作的"555“是5:55 (抛出异常)

我现在用的是:

代码语言:javascript
运行
复制
private static string[] _foramts = {"%hmm", "hmm", "hhmm","%h", "hh\\:mm", "%h\\:mm" };
return TimeSpan.ParseExact((string)value, _foramts, CultureInfo.InvariantCulture).ToString("hh\\:mm");

对于PadLeft,现在也不例外,但是..。

代码语言:javascript
运行
复制
var d = TimeSpan.ParseExact(((string)value).PadLeft(4, '0'), new string[]  { "%hmm", "hmm", "hhmm", "%h", "hh\\:mm", "%h\\:mm" }, CultureInfo.InvariantCulture).ToString("hh\\:mm");

"5“现在是00:05,我希望是05:00。

EN

回答 2

Stack Overflow用户

发布于 2016-06-03 17:09:03

问题是,根据可用的数字数,H格式匹配一个或两个数字。在您的情况下,它将获取前两位数字"55“,这不是一个正确的时间。填充零是解决这个问题的方法:

代码语言:javascript
运行
复制
 var c = TimeSpan.ParseExact(value.PadLeft(4, '0'), new string[] { "%hmm", }, CultureInfo.InvariantCulture);

如果您想要处理不同的格式,那么尝试将所有可能的输入与一种模式相匹配的简单的、老的If -else就更容易了。

代码语言:javascript
运行
复制
public static TimeSpan Parse(string value) {

    if (value.Length == 1)
    {
        value = value.PadLeft(2, '0');
        value = value.PadRight(4, '0');
    }
    else if (value.Length == 2)
    {
        value = value.PadRight(4, '0');
    }
    else if(value.Length == 3)
    {
        value = value.PadLeft(4, '0');
    }

    return TimeSpan.ParseExact(value, new string[] { "%h\\:mm", "%hmm", "hmm", "hhmm" }, CultureInfo.InvariantCulture);//Exception! None format works.
}
票数 1
EN

Stack Overflow用户

发布于 2016-06-03 16:49:06

我刚找到了解决方案,但不是通过格式。只需:使用用户字符串输入的.PadLeft(4,'0')。不过,我还是很好奇,它能用格式来完成吗?

编辑:但是现在这并不像预期的那样工作:

代码语言:javascript
运行
复制
var b = TimeSpan.ParseExact("5", new string[] { "%h" }, CultureInfo.InvariantCulture);

它会抛出异常:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37619449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档