使用前导零C#将字符串转换为DateTime

时间:2018-12-13 06:37:05

标签: c# datetime parsing leading-zero

我有一个MM/dd/yyyy格式的日期时间:

string datetime = "05/16/2018"

现在,根据要求,我需要将此string转换为DateTime。每当我这样做时,它都会删除前导零。

DateTime dt = DateTime.Parse(datetime, Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None)

在这里,它以5/16/2018的形式输出,但我需要以05/16/2018的形式输出。那么,我如何达到这个结果呢?

3 个答案:

答案 0 :(得分:5)

您需要了解DateTime只是一个代表时间点的对象。它不存储有关其格式的信息。以下是相同的DateTime,只是格式不同:

05/16/2018
5/16/2018

因为它们表示同一时间点

就像int的行为一样。它还将“删除您的前导零”:

int a = 05;
Console.WriteLine(a); // just prints "5".

05而言,5int是相同的int

DateTime中是否添加前导零取决于其格式。它们仅在您将DateTime转换为字符串时出现。 05/16/20185/16/2018是不同的string

如果要使用前导零,则只需在要输出时指定日期格式,例如dd/MM/yyyy

Console.WriteLine(dateTime.toString("dd/MM/yyyy")); // prints leading zeroes!

答案 1 :(得分:1)

首先,您的字符串DateTime格式(MM/dd/yyyy)令人困惑!它将为"05/08/2018"这样的字符串DataTime值提供误导性的值。因此,您必须使用ParseExact而不是Parse,如下所示:

DateTime dt = DateTime.ParseExact(datetime,"MM/dd/yyyy", CultureInfo.InvariantCulture);
  

输出为5/16/2018,但我需要输出为05/16/2018。那么,我如何达到这个结果呢?

只需将您的计算机DateTime格式更改为前导零DataTime格式,即可实现此目的!因为默认情况下,C#DateTime采用计算机Datatime格式的格式。

好吧,我还检查了一个测试控制台应用程序,以确认如果您的计算机DateTime格式包含前导零,那么转换后的DateTime可以包含前导零而不将其转换为字符串。 / strong>

答案 2 :(得分:0)

"5/16/2018"是日期时间值的字符串表示形式。 如果要输出前导零,则可以使用自定义格式:

dt.ToString("dd/MM/yyyy");