将字符串转换为日期时间 dd/MM/yyyy hh:mm:ss tt

4

我该如何将这个7/3/2015 12:40:02 PM转换为格式为"dd/MM/yyyy hh:mm:ss tt"的DateTime?我已经尝试了以下方法:

BreackEndTime = DateTime.ParseExact(configViewModel.EndPause, "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

但我总是遇到以下问题:

字符串无法被识别为有效的日期时间。

在此输入代码


2
请注意,如果该日期是今天的话,您可能意味着 M/d 而不是 dd/MM - Jon Skeet
另外,如果小时只有一位数的话,应该使用 h 而不是 hh - Dzienny
不,我想把日期放在第一位,而不是月份。 - Moez Rebai
4个回答

21

由于月份和日期可能只有一位数字,请使用

BreackEndTime = DateTime.ParseExact(configViewModel.EndPause, "d/M/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

"M"自定义格式说明符(示例,d的工作方式类似)

"M"自定义格式说明符将月份表示为数字1到12(或对于有13个月的日历,则为1到13)。单个数字月份格式化时不带前导零。

更新

由于小时也可能只有一个数字,您必须使用:

DateTime.ParseExact("7/3/2015 1:52:16 PM", "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);` 

...所以使用"d/M/yyyy h:mm:ss tt"而不是"d/M/yyyy hh:mm:ss tt"。请注意,如果分钟和秒钟也可能只有一个数字,请使用"d/M/yyyy h:m:s tt"。希望现在你明白了。


不,我想把日期放在第一位,而不是月份。 - Moez Rebai
@MoezRebai:然后交换日和月。你已经编辑了你的问题,在那之前它是“...第一个元素是月份”。如果第一个7是月份,请使用我的代码,如果是日期,请使用“d/M/yyyy hh:mm:ss tt”。 - Tim Schmelter
当我交换M和d时,它会处理异常,因为第一个是月份。 - Moez Rebai
1
@MoezRebai:如果你交换日期和月份,由于两者都是有效的日期,所以不会出现异常。这完全取决于您的规范。重要的是使用M而不是MM,并使用d而不是dd - Tim Schmelter
我已经添加了一个异常的图像,实际上我交换了日期和月份,但是我收到了异常。 - Moez Rebai
1
你必须使用 DateTime.ParseExact("7/3/2015 1:52:16 PM", "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);,因为小时数可能只有一位数字,所以要用 "d/M/yyyy h:mm:ss tt" 而不是 "d/M/yyyy hh:mm:ss tt" - Tim Schmelter

2
如果你的日期字符串是 7/3/2015 12:40:02 PM,你需要使用单个数字格式说明符,如M说明符d说明符
BreackEndTime = DateTime.ParseExact(configViewModel.EndPause,
                                    "M/d/yyyy hh:mm:ss tt", 
                                    CultureInfo.InvariantCulture);

2
不,我想把日期放在第一位,而不是月份。 - Moez Rebai
@MoezRebai 但是你在问题中说; 第一个元素 是月份。无论如何,只需将 dM 互换即可。 - Soner Gönül
我只想说,对于这个日期,第一个数字是7,表示月份。 - Moez Rebai

1
这是在我的情况下运行良好的代码:

        Console.WriteLine("deal with regex datetime: ");
        string input = "11/24 5:41:00 AM";
        DateTime newDate;
        CultureInfo enUS = new CultureInfo("en-US");
        try
        {
            newDate = DateTime.ParseExact(input, "M/d h:mm:ss tt", CultureInfo.InvariantCulture);
            Console.WriteLine("parse result: " + newDate);
        }
        catch (Exception err)
        {
            Console.WriteLine("error parsing input string. date format is wrong or string chaged " + err);
        }

0
FORMAT(CM.TransactionDate,'hh:mm:ss tt')

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