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中有这个错误?
问题是您的区域设置。在日期值上调用不带参数的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