代码之家  ›  专栏  ›  技术社区  ›  Jimmy

为什么不能用m''d''yyyy h':'mm':'ss''tt分析4/4/2010 4:20:00 pm中的am/pm?

  •  29
  • Jimmy  · 技术社区  · 15 年前

    我用的是C,如果我用的话

    DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)
    

    返回值总是4:20 AM——我使用TT有什么问题?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  62
  •   Andrew Hare    15 年前

    设置小时格式( H )小写:

    DateTime.ParseExact(
                "4/4/2010 4:20:00 PM", 
                "M/d/yyyy h:mm:ss tt", 
                CultureInfo.InvariantCulture);
    

    大写的“H”表示24小时,小写的“H”表示12小时,并将尊重候选字符串中的AM/PM。

    旁注: 最好提供一个 IFormatProvider 像这样的方法(即使只是 CultureInfo.InvariantCulture )只有当你遇到问题时,这才是真正意义上的事情之一,所以养成指定文化信息的习惯是很好的。

        2
  •  3
  •   Reed Copsey    15 年前

    请尝试以下操作:

    Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy h':'mm':'ss tt", null));
    

    此输出:

     4/4/2010 4:20:00 PM
    
        3
  •  2
  •   Sean Carpenter    15 年前

    您需要在格式字符串中使用小写的“h”作为小时参数。大写的“H”代表24小时时间,因此“4”被认为是上午4点(因为“16”是下午4点)。

    DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)