【问题标题】:C#: DateTime problemsC#:日期时间问题
【发布时间】:2014-09-19 12:01:21
【问题描述】:

在 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 中有这个错误?

【问题讨论】:

  • 试试 DateTime.TryParse,它将处理 MM/dd/yyyy(假设您的文化是正确的)
  • mm,你可以 DateTime xy = DateTime.Parse(whatever_string);然后只获取日期 xy.Date
  • 我很确定您的字符串变量 aux 不包含您期望的字符串。
  • 不要这么肯定,我有我说的正确的字符串格式的结果,再看看问题
  • 30 in "30/07/2014" 不是有效的月份数(12 月是最后一个,它是第 12 个),因此 "MM/dd/yyyy" 不是正确的解析模式。请改用“dd/MM/yyyy”或确保使用正确的字符串 - 您的问题存在一些差异:“with it({30/07/2014 0:00:00}???) 我得到 04/ 30/2014"。

标签: c# datetime


【解决方案1】:

问题在于您的区域设置。在日期值上不带参数调用 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"));

【讨论】:

  • 当然,将显式格式字符串与另一个显式格式字符串匹配会更好,而不是在将Split 应用于结果后碰巧匹配格式字符串的CultureInfo?或者甚至问为什么 OP 将 DateTime 转换为 string 并立即返回?
  • 嗯,你的两个观点都是正确的。 OP 不清楚是什么导致了这种从日期到字符串然后又回到日期的转换。如果
【解决方案2】:

当您在下面调用时: 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]);

希望对你有帮助

问候,
桑迪普

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多