将datetime转换为带有月份名称的字符串,并返回非NOT日期

时间:2019-02-25 15:54:47

标签: c# datetime

我想这样转换日期(frensh):25/02/2019 => 25Fév2019 我可以使用字符串值:

date.ToString("dd MMM yyyy");

但是此返回字符串和我需要一个日期类型,因为我将在图表中将其用作值。

我尝试过这个:

var formats = new[] { "dd MMM yyyy" }; 
var date = DateTime.ParseExact("25/02/2019", DateFormat,
                         System.Globalization.CultureInfo.CurrentCulture,
                         System.Globalization.DateTimeStyles.AssumeLocal);

但出现错误

  

“该字符串未被识别为有效的DateTime吗?”

2 个答案:

答案 0 :(得分:3)

这是一个基本问题,新开发人员没有了解DateTime和它的 text 表示形式(也称为string)之间的区别。不用担心,我们都有相同的问题。

DateTime不具有任何格式。它只具有日期和时间值。并且它的计算结果为long,称为Ticks

另一方面,您想要的25 Fév 2019是它的文本表示,这意味着它是string。您不能将{25}用作DateTime,但可以将其作为string

假设您有一个"25/02/2019"作为string,并且您想将其解析为DateTime。在这种情况下,您可以像以前一样使用DateTime.ParseExact

DateTime myDateTime = DateTime.ParseExact("25/02/2019", "dd/MM/yyyy", 
                               CultureInfo.InvariantCulture);

现在您有了一个DateTime,并且可以得到具有.ToString() method和法语(fr-FR)文化的文本(又称字符串)表示形式。

string myString = myDateTime.ToString("dd MMM yyyy", new CultureInfo("fr-FR"));

顺便说一句,在fr-FR文化中,缩写的月份名称是févr.,而不是Fév。据我所知,frfr-FRfr-CA都没有该字符串。要获得所需的内容,必须删除最后2个字符,并使第一个字符大写。

enter image description here

答案 1 :(得分:1)

最后,我根据@Rufus L的建议找到了解决方案,我将值保留为Datatime,然后更改了LabelStyle

AxisY.LabelStyle.Format="{0:dd MMM yyyy}"

我得到了甘特图,非常感谢

enter image description here