如何仅使用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.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
{