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

本文关键字:转换 时间 Parse DateTime 何仅使 | 更新日期: 2023-09-27 18:27:08

我有一个字符串变量,它的值被格式化为"1:23:45 AM"我需要将其转换为不带日期组件的时间的DateTime变量。我收到一个由格式化引起的"未处理的异常"错误。如果我删除了"AM",它可以正常工作,但我要做的事情需要"AM/PM"组件。我目前正在使用以下代码尝试此操作。。。

"temp"是我正在使用的变量的名称,直到我想出一个更有意义的变量名称。。。

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(temp);**
            subtract.AddSeconds(-rndmTmp2);
            PlusMinus = subtract.ToString("h:mm:ss tt");
            return PlusMinus;
        }
        else
        {

DateTime减法=DateTime.Passe(temp);是导致错误的线路吗

错误为:

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

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

到目前为止,我发现的关于此主题的大多数信息都包括取决于Date组件存在的解决方案,而我没有使用该组件。

有什么想法吗?感谢

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

您应该尝试使用DateTime.ParseExact解析它,从这里使用自定义格式:自定义日期和时间格式字符串

您的问题是这个

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

将其更改为

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

有点复杂,因为字符串是作为输入传入的。秒后没有冒号,数字用零填充。此外,由于它们是输入变量,在某个时刻,您应该验证它们是否在0-59之间。

如果您只对返回时间部分感兴趣,那么添加一个额外的变量来保存日期部分,并在解析它时将其附加到temp的前面?类似:

string tempDate = "2008-05-01 "

这对我有效:

        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);
        }

也许你的问题与某个特定的时间有关。

UPDATE:您需要检查是否将分钟和秒传递给该函数,对于1-2..9等值,使用0。因为标准提供程序不接受像"1:1:2 AM"这样的字符串。

公共字符串PlusMinus12(字符串小时、字符串分钟、字符串秒、字符串ampm){字符串PlusMinus;int rndmTmp1=随机1();int rndmTmp2=随机2();

    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
    {