如何仅使用DateTime.Parse转换时间?

时间:2015-12-16 20:28:19

标签: c#

我有一个字符串变量,其值的格式看起来像“1:23:45 AM” 我需要将它转换为DateTime变量的时间没有日期组件。 我收到格式化导致的“未处理异常”错误。如果我删除“AM”,它工作正常,但我想要做的是“AM / PM”组件。 我目前正在使用以下代码来尝试此...

“temp”是我使用的变量的名称,直到我想出一个更有意义的变量名称...

--journal

DateTime subtract = DateTime.Parse(temp);是导致错误的行

错误是:

mscorlib.dll中发生未处理的“System.FormatException”类型异常

其他信息:字符串未被识别为有效的DateTime。

到目前为止,我在这个主题上发现的大部分信息包括依赖于Date组件存在的解决方案,我没有使用。

有什么想法吗? 谢谢

5 个答案:

答案 0 :(得分:3)

您应该尝试使用DateTime.ParseExact使用自定义格式解析它:Custom Date and Time Format Strings

答案 1 :(得分:0)

如果您只对返回时间部分感兴趣,请添加一个包含日期部分的额外变量,并在解析时将其附加到temp的前面? 像:

string tempDate = "2008-05-01 "

答案 2 :(得分:0)

这对我有用:

        string timeString = "1:23:45 AM";
        string format = "h:mm:ss tt";
        CultureInfo provider = CultureInfo.InvariantCulture;

        try
        {
            DateTime result = DateTime.ParseExact(timeString, format, provider);
            Console.WriteLine("{0} converts to {1}.", timeString, result.ToString());
        }
        catch (FormatException)
        {
            Console.WriteLine("{0} is not in the correct format.", timeString);
        }

可能你的问题是在特定的时间。

更新:您需要检查您是否正在向此函数传递分钟和秒数,其值为1-2 ......等值。因为标准提供商不会接受类似' 1:1:2 AM'的字符串。

答案 3 :(得分:0)

public string PlusMinus12(string hour,string minute,string second,string ampm)     {         string PlusMinus;         int rndmTmp1 = Random1();         int rndmTmp2 = Random2();

    if (rndmTmp1 == 0)
    {
        PlusMinus = hour + ":" + minute + ":" + second + ": " + ampm;
        return PlusMinus;
    }
    else if (rndmTmp1 == 1)
    {
        string temp = hour + ":" + minute + ":" + second +": " + ampm;
        DateTime subtract = DateTime.Parse("2000-01-01 " + temp);
        subtract.AddSeconds(-rndmTmp2);
        PlusMinus = subtract.ToString("h:mm:ss tt");
        return PlusMinus;
    }
    else
    {

答案 4 :(得分:0)

你的问题是这个

PlusMinus = hour + ":" + minute + ":" + second + ": " + ampm;

将其更改为

PlusMinus = Int32.Parse(hour).ToString("00") + ":" + Int32.Parse(minute).ToString("00") + ":" + second.ToString("00") + " " + ampm;

因为字符串作为输入传入,所以有点复杂。几秒后没有冒号zero pad the numbers。此外,由于它们是输入变量,因此在某些时候您应该验证它们在0-59之间。