如何以其他格式格式化DateTime?

Cod*_*ter 1 c# datetime parsing

我有一个字符串表示某种格式的日期,我希望格式不同.有人告诉我使用DateTime.(Try)ParseExact,所以我做了:

var dateString = "2016-02-26";
var formatString = "dd/MM/yyyy";

var parsedDate = DateTime.ParseExact(dateString, formatString, null);
Run Code Online (Sandbox Code Playgroud)

你看,我想格式化日期dd/MM/yyyy,所以26/02/2016.但是,此代码抛出FormatException:

字符串未被识别为有效的DateTime.

如何以不同方式格式化DateTime?

Cod*_*ter 5

首先,DateTime没有格式.一个日期时间持有时刻和一个标志,表明一刻是本地,UTC不明.

日期时间结构

备注

DateTime值类型表示日期和时间,其值为00:00:00(午夜),1月1日,0001 Anno Domini(Common Era)到11:59:59 PM,12999年12月31日,公元9999年(CE)在Gregorian日历.

时间值以称为刻度的100纳秒单位进行测量,特定日期是格里高利历日历中自公元0001年1月1日午夜12点起的刻度数(不包括闰秒添加的刻度) .例如,刻度值31241376000000000L表示日期,星期五,1月01日,0100 12:00:00午夜.DateTime值始终在显式或默认日历的上下文中表示.

DateTime格式化的唯一时刻是将其值输出为字符串.

您提供的格式字符串(Try)ParseExact要解析的日期(时间)字符串所在的格式.请参阅MSDN:自定义日期和时间格式字符串,以了解如何编写自己的格式字符串.

因此,您正在寻找解析该字符串的代码是这样,并再次确保格式字符串与输入日期字符串的格式完全匹配:

var dateString = "2016-02-26";
var formatString = "yyyy-MM-dd";

var parsedDate = DateTime.ParseExact(dateString, formatString, null);
Run Code Online (Sandbox Code Playgroud)

现在parsedDate保存一个DateTime值,您可以以所需的格式输出(并注意您必须转义/,因为它将被解释为"当前文化的日期分隔符",如上面MSDN链接中所述) :

var formattedDate = parsedDate.ToString("dd\\/MM\\/yyyy");
Run Code Online (Sandbox Code Playgroud)

这将以所需格式格式化日期:

26/02/2016
Run Code Online (Sandbox Code Playgroud)