c#:日期时间问题

本文关键字:问题 时间 日期 | 更新日期: 2023-09-27 18:15:16

在一个DateTime类型的变量中设置这个值= {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);

我有这个错误:

这个字符串表示一个在公历日历中不允许的日期时间

为什么我在aux2中有这个错误?

c#:日期时间问题

问题是您的区域设置。在日期值上调用不带参数的ToString()会生成一个字符串,该字符串的日、月、年模式在不同地区之间的排列方式不同。(我假设你得到一个由Day,Separator, Month, Separator, Year排列的字符串)。
将该字符串以特定的模式(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"));

当你在下面调用: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