DateTime.TryParseExact C#有效格式和解析

时间:2015-11-25 11:50:16

标签: c# datetime

遇到了格式化的问题。

if (!DateTime.TryParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateOn))
{
     return false;
}
else if (!DateTime.TryParseExact(timeString, "hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out timeOn))
{
     return false;
}

return SaveWorkshop(id, name, dateOn, timeOn, capacity, description, duration, isCancelled);

使用Bootstrap Datetimepicker,它确实从格式

的文本框中获取字符串
  

dateString = 11/28/2015 and timeString = 6:46 AM

但是在结果中我确实有假并且正在解析默认日期。可能是什么问题?

3 个答案:

答案 0 :(得分:9)

对于timeString,您需要使用h代替hh说明符。

对于06这样的单个数字,

hh specifier需要leading zero。您需要改为使用h specifier

这就是为什么您的第二个DateTime.TryParseExact返回falsetimeOn将成为默认值。

答案 1 :(得分:2)

如果我没弄错的话," hh"需要一个两位数的小时,你没有。使用" h"对于非零填充值。

答案 2 :(得分:0)

此外,您解析时间今天在午夜返回的日期将TimeSpan从解析timeString中添加。

因此,为了切断今天的约会,做一下这样的事情:

// snip ..
DateTime datetimeOn = dateOn.Add(timeOn.TimeOfDay);
return SaveWorkshop(id, name, datetimeOn, capacity, description, duration, isCancelled);

或者,当然,修改SaveWorkshop以在内部创建datetimeOn

修改

另外,你可以一次解析:

DateTime datetimeOn;
DateTime.TryParseExact(dateString + timeString, "MM/dd/yyyyh:mm tt", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datetimeOn);