C#:DateTime问题

时间:2014-07-28 10:05:15

标签: c# datetime

在DateTime的变量中,typeI具有此值= {30/07/2014 0:00:00}

我只想要日期:

var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

有了它我正确地获得了30/04/2014

但是当我想用MM / dd / yyyy转换时使用:

var aux2 = DateTime.ParseExact(aux, "MM/dd/yyyy", null);

我有这个错误:

字符串表示GregorianCalendar中未提供的一个DateTime

为什么我在aux2中出现此错误?

2 个答案:

答案 0 :(得分:2)

问题在于您的区域设置。在日期值上调用不带参数的ToString()会生成一个字符串,其中模式日,月,年在区域设置之间排列不同。 (我想你得到的日期,分隔符,月份,分隔符,年份字符串。) 将该字符串传递给具有特定模式(MM / dd / yyyy)的DateTime.ParseExact,需要字符串为您的示例所需的月,日,年所需的确切模式。

您可以使用

强制转换中的不变文化
 var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

这将生成一个字符串,其中包含后续ParseExact掩码所需的模式

但是,您不清楚为什么需要这些转换。日期不是字符串,您只需将其保留为日期并仅在需要在某处表示时才使用转换(显示,打印等...)

 Console.WriteLine("Date is:" + pedido.ord_cus_deliv_date.ToString("MM/dd/yyyy"));

答案 1 :(得分:-1)

当你在下面打电话时: var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

这为您提供代码“07-30-2014”而不是“07/30/2014”,并且在转换时生成错误。所以要获得“07/30/2014”,你必须写

var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

以下是您的整体代码:

DateTime value = DateTime.Parse("30/07/2014 0:00:00"); //your date time value

var aux = value.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

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

var aux2 = dt.ToString(CultureInfo.InvariantCulture).Split(' ')[0]);

我希望这会对你有所帮助

的问候,
和Sandeep