DateTime.ParseExact - 英国日期和时间

6

我正在尝试解析以下英国格式的DateTime字符串:24/01/2013 22:00

但是,我一直收到以下错误:

字符串无法被识别为有效的 DateTime。

CultureInfo.CurrentCulture返回了"en-GB",这是正确的

以下是我的代码

    [TestMethod]
    public void TestDateTimeParse()
    {
        DateTime tester = DateTime.ParseExact("24/01/2013 22:00", "d/M/yyyy hh:mm", CultureInfo.CurrentCulture);

        int hours = tester.Hour;
        int minutes = tester.Minute;

        Assert.IsTrue(true);
    }

我不相信当你使用ParseExact时,文化背景会有太大的影响。 - Rudi Visser
3个回答

20

hh 适用于12小时制的时钟。你应该使用 HH

DateTime.ParseExact("24/01/2013 22:00", 
                    "d/M/yyyy HH:mm", // <-- here
                    CultureInfo.CurrentCulture)

5

"hh" 表示使用12小时制展示的小时数,范围从01到12

"HH" 表示使用24小时制展示的小时数,范围从00到23

可以像这样尝试使用:

public static void Main(string[] args)
{
    DateTime tester = DateTime.ParseExact("24/01/2013 22:00", "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
}

这里有一个演示

你还可以查看来自MSDN的自定义日期和时间格式字符串


1
没错,但最好能够解释一下为什么。(顺便说一句 - ddMM 不是必需的)。 - Oded
@Oded 你说得对,但你已经很好地解释了为什么。因为如果我也写了它,那看起来是不是就像抄袭?(是的,ddMM并不是必要的,但这对我来说比dM更易读) - Soner Gönül
我不知道复制的事,但是努力让每个答案都尽可能地最好,这不是一个坏的目标,对吧? - Oded
1
@Oded 当然,你是对的。但有时候,当你写了几乎相同的答案并且高声望的人责备你抄袭他们的回答和刷声望时,这并不好。当然这很不爽。 - Soner Gönül

1
你的格式不正确,请尝试这个:

你的格式不正确,请尝试这个:

DateTime tester = DateTime.ParseExact("24/01/2013 22:00", "dd/MM/yyyy HH:mm", CultureInfo.CurrentCulture);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接