1

背景:我们有一个从另一个后端系统接收数据的系统。我们处理该数据的显示,并且我们有自己的 XML 模板来控制某些内容的显示方式(即,我们有自己的列模板来指示列标题是什么等)我们想要支持的一件事是能够为这些列模板提供一个掩码,该掩码将应用于来自后端的值。以下是我遇到问题的场景。

问题:我似乎无法让简单的字符串格式正常工作。我想以时间格式(即“14:44”)格式化一个四位数的字符串值(即“1444”)。我试过了:

String.Format("{0:00:00}", "1444")

请注意输入作为字符串的重要性。如果我提供一个 int 值,则该格式将起作用。我不能使用它的原因是因为我们从后端收到的所有数据都是字符串格式的,我们希望它是通用的(所以强制转换不是一个真正的选项)。

通过泛型,我的意思是我想在我们自己的 XML 模板中指定一个掩码,例如:

<MyColumnTemplate Id="MyColumn" Mask="00:00" />

并以字符串格式使用该掩码调用字符串值?如果掩码失败,我们可以简单地返回原始值(正如 String.Format() 方法默认所做的那样)。

编辑:为了帮助澄清,这是我希望能够在代码中执行的简化版本:

string inputValue = "1444";
string maskValueFromXml = "00:00";

string mask = "{0:" + maskValueFromXml + "}";
string myDesiredEndResult = String.Format(mask, inputValue);
4

2 回答 2

1

问题是您正在逐串工作,因为您要求时间和电话号码它们都是数字然后尝试这个技巧(如果我们可以称之为:)):

string result = string.Format("{0:00:00}", int.Parse("1444"));

对于电话号码:

string result = string.Format("{0:000-000-0000}", int.Parse("1234560789"));

例如,您甚至可以将所需的掩码放在字典中并执行以下操作:

Dictionary<string, string> masks = new Dictionary<string, string>();
masks.Add("Phone", "{0:000-000-0000}");
masks.Add("Time", "{0:00:00}");
string test = "1234560789";
string result = string.Format(masks["Phone"], int.Parse(test));
于 2013-10-29T14:59:25.373 回答
0

尝试使用 DateTime.TryParseExact,例如:

    DateTime dateEntered;
    string input = "1444";

    if (DateTime.TryParseExact(input, "HH:mm", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dateEntered))
    {
        MessageBox.Show(dateEntered.ToString());
    }
    else
    {
        MessageBox.Show("You need to enter valid 24hr time");
    }

之后,您可以使用 string.Format,MSDN上的预定义格式。

于 2013-10-29T14:27:36.463 回答