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

时间:2016-02-26 11:36:19

标签: c# parsing datetime

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

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

var parsedDate = DateTime.ParseExact(dateString, formatString, null);

您知道,我想将日期格式设为dd/MM/yyyy,因此26/02/2016。但是,此代码抛出FormatException:

  

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

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

2 个答案:

答案 0 :(得分:5)

首先,DateTime没有格式。 DateTime会保留一个时刻,flag表示该时刻是LocalUtc还是Unspecified

  

DateTime Structure

     

说明

     

DateTime值类型表示日期和时间,值范围为00:00:00(午夜),1月1日,0001 Anno Domini(Common Era)至11:59:59 PM,12月31日,9999 AD(CE)在阳历中。

     

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

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

您提供给(Try)ParseExact的格式字符串要解析的日期(时间)字符串的格式。请参阅MSDN: Custom Date and Time Format Strings以了解如何编写自己的格式字符串。

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

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

var parsedDate = DateTime.ParseExact(dateString, formatString, null);

现在parsedDate包含DateTime值,您可以按所需格式输出该值(并注意您必须转义/,因为它将被解释为“当前文化的日期分隔符“,如上面MSDN link中所述):

var formattedDate = parsedDate.ToString("dd\\/MM\\/yyyy");

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

26/02/2016

答案 1 :(得分:0)

您可以将其用于String日期

DateTime.ParseExact(dateString, format, provider);

和提供者值

CultureInfo provider = CultureInfo.InvariantCulture;

Microsoft documentation

中所述