Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅使用DateTime.Parse转换时间?_C# - Fatal编程技术网

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

C# 如何仅使用DateTime.Parse转换时间?,c#,C#,我有一个字符串变量,其值的格式类似于“1:23:45AM” 我需要将其转换为一个DateTime变量,用于不带日期组件的时间。 我收到一个“未处理的异常”错误,该错误是由格式化引起的。如果我删除“AM”,它工作正常,但“AM/PM”组件是我试图做的事情所必需的。 我目前正在使用以下代码尝试此操作 “temp”是我正在使用的变量名,直到我找到一个更有意义的变量名 public string PlusMinus12(string hour, string minute, string second,

我有一个字符串变量,其值的格式类似于“1:23:45AM” 我需要将其转换为一个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 subtract=DateTime.Parse(temp);是该行导致错误吗

错误是:

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

其他信息:字符串未被识别为有效的日期时间

到目前为止,我在这个主题上找到的大多数信息都包括依赖于日期组件存在的解决方案,我没有使用这个组件

有什么想法吗?
谢谢

您应该尝试从这里使用自定义格式对其进行解析:

如果您只想返回时间部分,请添加一个额外的变量来保存日期部分,并在解析时将其附加到temp的前面? 比如:

这对我很有用:

        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);
        }
也许你的问题是在某个特定的时间

更新:您需要检查您是否正在使用0向该函数传递分和秒,值为1-2..9。因为标准提供程序将不接受类似“1:1:2 AM”的字符串

公共字符串plusMinus 12(字符串小时、字符串分钟、字符串秒、字符串ampm) { 弦加弦; int rndmTmp1=Random1(); int rndmTmp2=Random2()

你的问题是

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

PlusMinus=Int32.Parse(小时)。ToString(“00”)+:“+Int32.Parse(分钟)。ToString(“00”)+:“+second.ToString(“00”)+”+ampm


有点复杂,因为字符串作为输入传入。秒和之后没有冒号。此外,因为它们是输入变量,所以在某个点上,您应该验证它们是否在0-59之间。

您可以显示
temp
对值有什么要求吗?我在运行代码时没有发现任何异常。您需要显示所有相关的代码和indicate发生异常的地方。另外,实际的错误消息是什么?你确定临时字符串是你期望的格式吗?它对我也有效。也许这是你的答案?另一方面,我尝试了它,你的代码将其转换为字符串格式没有问题。我会再次检查格式。我已经更新了代码…谢谢!我假设我失明了,几秒钟后我甚至看不到结肠。。。
    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
    {
PlusMinus = hour + ":" + minute + ":" + second + ": " + ampm;