有人可以告诉我如何做以下的最佳方法或解决方案吗?
我有以下格式的DateTime(作为字符串):
string test = "21.12.2013";
我现在怎么能从月份和日期中删除所有零,但仍然“保留”日期时间逻辑:
//Example 1
string input = "06.10.2013" // 6th October
string output = "6.10.2013" //only remove '0' from the day
//Example 2
string input = "01.09.2012" // 1st September
string output = "1.9.2012" //remove from month and day
//Example 3
string input = "20.10.2011" // 20th October
string output = "20.10.2011" //should (must) stay!
我也可以解析为DateTime
,如果这样会更容易,但是我希望你能得到我的想法......
任何帮助表示赞赏!
答案 0 :(得分:5)
将您的字符串解析为DateTime
并使用ToString
将其恢复为字符串,并带有所需的模式似乎是最简单的方法:
public static string GetRidOfZeros(string input)
{
var dt = DateTime.ParseExact(input, "dd.MM.yyyy", CultureInfo.InvariantCulture);
return dt.ToString("d.M.yyyy", CultureInfo.InvariantCulture);
}
很少测试,包括您的样本数据:
var inputs = new List<string> { "06.10.2013", "01.09.2012", "20.10.2011" };
var outputs = new List<string> { "6.10.2013", "1.9.2012","20.10.2011" };
if(outputs.SequenceEqual(inputs.Select(d => GetRidOfZeros(d))))
Console.WriteLine("Output is OK");
else
Console.WriteLine("Collections does not match.");
打印Output is OK
。
答案 1 :(得分:4)
DateTime.Parse(input).ToString("d.M.yyyy")
答案 2 :(得分:2)
正如你所说,首先解析为DateTime
可能会让事情变得更容易,因为那时你可以使用:
myDateTime.ToString("d.M.yyyy");
答案 3 :(得分:2)
解析它时,您可以使用ToString以您喜欢的方式格式化它:
var date = "06.10.2013";
DateTime parsed = DateTime.ParseExact(date, "dd.MM.yyyy", CultureInfo.InvariantCulture);
var noZerosHere = parsed.ToString("d.MM.yyyy");
答案 4 :(得分:-1)
一个体面的“全能”方法(不仅可以在DateTime
上工作,而且可以在任何类型的字符串上工作)将分割字符串,取出前导零,然后再将这些部分重新组合在一起。
string input = "01.09.2012";
string[] values = input.Split(".");
string[] modifiedValues = values.Select(x => x.TrimStart('0');
string output = String.Join(".", modifiedValues);
您可以针对DateTime的不同表示调整分隔符,例如那些使用斜杠(01/09/2012)或以不同顺序编写的。