在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中出现此错误?
答案 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