从DB中读取<YYYY><MM><DD>
之类的值,将此值传递给我的日期格式,如(&#34; YYYYmmdd&#34;)
date = DateTime.Now;
YYMMVal = date.ToString(DateFormat);
我正在使用替换功能来获取我的日期格式,如下所示
strDateFormat = strDTF.ToString();
string LessThanFormat = strDateFormat.Replace("<", "");
string greaterThanFormat = LessThanFormat.Replace(">", "");
String yearFormats = greaterThanFormat.Replace("Y", "y");
String MonthFormat = yearFormats.Replace("m", "M");
string DateFormat = MonthFormat.Replace("D", "d");
或
StringBuilder srtbDateFormat = new StringBuilder(strDateFormat);
srtbDateFormat.Replace("<", "");
srtbDateFormat.Replace(">", "");
srtbDateFormat.Replace("Y", "y");
srtbDateFormat.Replace("m", "M");
srtbDateFormat.Replace("D", "d");
YYMMVal = date.ToString(srtbDateFormat.tostring());
替换上述字符串并与日期格式匹配的有效方法是什么?
答案 0 :(得分:4)
你所拥有的东西似乎很明智,而且相当容易理解。这是留下它的好理由。
此外,如果您的格式字符串仅限于年,月和日期组件,加上&lt;和&gt;字符,只有这么多组合可能。您可以提前设置Dictionary<string, string>
并使用您预期的每个输入字符串预先播种它,映射到所需的输出。
这假设你在某种循环中这样做。如果你只需要做一次,那没关系。
答案 1 :(得分:2)
您可以使用Dictionary
string input = "<YYYY><MM><DD>";
var pairs = new Dictionary<char, char> { { 'Y', 'y' }, { 'm', 'M' }, { 'D', 'd' } };
string format = new string(
string.Concat(input
.Split(new[] {'<', '>'}, StringSplitOptions.RemoveEmptyEntries))
.Select(x =>
{
if (pairs.ContainsKey(x))
return pairs[x];
return x;
}).ToArray()
);
答案 2 :(得分:1)
简单的方法是使用Replace
方法的输出是另一个字符串并将调用链接在一起这一事实:
string inputDateFormat = "<YYYY><MM><DD>";
string outputDateFormat = inputDateFormat.Replace("<", "")
.Replace(">", "")
.Replace("Y", "y")
.Replace("m", "M")
.Replace("D", "d");
答案 3 :(得分:0)
如果我理解正确,您希望将<YYYY><MM><DD>
转换为YYYYmmdd
。
有几种方法可以做到这一点,但如果它只是一个日期格式字符串,为什么不从头开始提供格式字符串呢?
选择哪种方式并不重要,<YYYY><MM><DD>
将始终转换为YYYYmmdd
,因此您始终知道该函数的确切输出。
如果您的DATE格式为<YYYY><MM><DD>
,这意味着它如下所示:<2012><06><03>
那么您应该看一下celerno的答案。