【发布时间】:2017-05-28 17:26:01
【问题描述】:
首先,我想指出,期望的结果是一个字符,而不是它的位置索引 (int)。
我试图让我的用户选择他们想要的日期格式,因此,我创建了 2 个组合框:comboBox_DateFormatDivider,用户在点、破折号和斜杠之间进行选择;和comboBox_DateFormat 用户选择日期格式。 comboBox_DateFormat 包含一个List<string> 如下:
_dateFormatsList = new List<string>()
{
"d-M-yy (" + DateTime.Now.ToString("d-M-yy") + ")",
"dd-M-yy (" + DateTime.Now.ToString("dd-M-yy") + ")",
"d-MM-yy (" + DateTime.Now.ToString("d-MM-yy") + ")",
"dd-MM-yy (" + DateTime.Now.ToString("dd-MM-yy") + ")",
"d-M-yyyy (" + DateTime.Now.ToString("d-M-yyyy") + ")",
"dd-M-yyyy (" + DateTime.Now.ToString("dd-M-yyyy") + ")",
"d-MM-yyyy (" + DateTime.Now.ToString("d-MM-yyyy") + ")",
"dd-MM-yyyy (" + DateTime.Now.ToString("dd-MM-yyyy") + ")",
"yy-M-d (" + DateTime.Now.ToString("yy-M-d") + ")",
"yy-M-dd (" + DateTime.Now.ToString("yy-M-dd") + ")",
"yy-MM-d (" + DateTime.Now.ToString("yy-MM-d") + ")",
"yy-MM-dd (" + DateTime.Now.ToString("yy-MM-dd") + ")",
"yyyy-M-d (" + DateTime.Now.ToString("yyyy-M-d") + ")",
"yyyy-M-dd (" + DateTime.Now.ToString("yyyy-M-dd") + ")",
"yyyy-MM-d (" + DateTime.Now.ToString("yyyy-MM-d") + ")",
"yyyy-MM-dd (" + DateTime.Now.ToString("yyyy-MM-dd") + ")"
};
comboBox_DateFormat.DataSource = _dateFormatsList;
当用户选择不同的分隔符时,它必须反映在另一个组合框中,因为DateFormat依赖于DateFormatDivider,所以它的内容必须在运行时改变。这是代码(和问题):
private void comboBox_DateFormatDivider_SelectedIndexChanged(object sender, EventArgs e)
{
for (int i = 0; i < _dateFormatsList.Count; i++)
{
_dateFormatsList[i] = _dateFormatsList[i].Replace(_dateFormatsList[i].???.ToString(), comboBox_DateFormatDivider.SelectedText);
}
}
选择的日期格式稍后会保存到数据库中,所以我想我还可以添加另一个字段来存储分隔符,但我不希望这样做。如您所见,上面的代码中包含???。所以,问题是:如何将这些问号替换为可以找到它包含的分隔符的代码?
【问题讨论】:
-
您应该在初始化该列表之前执行
DateTime now = DateTime.Now;,以避免出现DateTime.Now的值在元素之间发生变化的情况。 -
执行 Regex.Match 来找到相关的分隔符并添加逻辑,这不是很简单,使用类似
Regex.Match(Value,".*(?:-).*")的东西就会给你替换的分隔符 -
您也可以将格式字符串存储为
"dd@mm@yyyy"之类的内容,然后当您将其用于DateTime.ToString时,将@ 字符替换为使用_dateFormatsList[i].Replace("@", _chosenSeparator)选择的分隔符。 -
拜托,拜托,请不要去正则表达式来解决这个问题! Abion47给了你一个很好的答案。
-
@swatsonpicken 正则表达式有什么问题?