从DateTime月和日(字符串)中删除'0'(数字)

时间:2013-12-21 00:30:06

标签: c# string datetime

有人可以告诉我如何做以下的最佳方法或解决方案吗?

我有以下格式的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,如果这样会更容易,但是我希望你能得到我的想法......

任何帮助表示赞赏!

5 个答案:

答案 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)或以不同顺序编写的。