我有一个字符串变量,其值的格式看起来像“1:23:45 AM” 我需要将它转换为DateTime变量的时间没有日期组件。 我收到格式化导致的“未处理异常”错误。如果我删除“AM”,它工作正常,但我想要做的是“AM / PM”组件。 我目前正在使用以下代码来尝试此...
“temp”是我使用的变量的名称,直到我想出一个更有意义的变量名称...
--journal
DateTime subtract = DateTime.Parse(temp);是导致错误的行
错误是:
mscorlib.dll中发生未处理的“System.FormatException”类型异常
其他信息:字符串未被识别为有效的DateTime。
到目前为止,我在这个主题上发现的大部分信息包括依赖于Date组件存在的解决方案,我没有使用。
有什么想法吗? 谢谢
答案 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之间。