我发现了很多关于将时间字符串转换为DateTime对象以及将日期字符串转换为DateTime对象的精彩解决方案。我没有找到的是同时做到这两点的事情。
这两个字符串的一个例子是:
1/10/2017
12:00 AM
这是我的尝试。
C#
var start = model.PublishDate;
var time = model.PublishTime;
if(time.Length == 7)
{
time = "0" + time;
}
var dateTimeString = start + " " + time;
dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString,
new string[] { "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt", "M/dd/yyyy hh:mm:ss tt", "MM/d/yyyy hh:mm:ss tt" }, CultureInfo.InvariantCulture, DateTimeStyles.None);
然而它会抛出错误。任何建议都会很精彩。谢谢!
答案 0 :(得分:3)
修复两个字符串之间缺少的空格后,还有另一个问题。生成的字符串不包含PM或AM规范,而提供给DateTime.ParseExact的格式字符串需要存在这些字符。
您可以从格式中删除此要求
string[] formats = new string[]
{
"M/d/yyyy hh:mm:ss",
"MM/dd/yyyy hh:mm:ss",
"M/dd/yyyy hh:mm:ss",
"MM/d/yyyy hh:mm:ss"
};
dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString,
formats, CultureInfo.InvarianCulture, DateTimeStyles.None);
但如果您的时间部分包含指定为0-23的小时数,那么这将不起作用the format hh cannot work with values bigger than 12。所以你需要将hh改为HH
修改强>
看到你上次编辑后,我认为字符串的正确格式
1/10/2017 12:00 AM
将没有秒说明符和tt再次
string[] formats = new string[]
{
"M/d/yyyy hh:mm tt",
"MM/dd/yyyy hh:mm tt",
"M/dd/yyyy hh:mm tt",
"MM/d/yyyy hh:mm tt"
};
答案 1 :(得分:2)
也许让框架为您完成工作。样品:
string dateString = "1/12/2017";
string timeString = "10:55:00 pm";
var d = DateTime.Parse(dateString).Date;
var t = DateTime.Parse(timeString).TimeOfDay;
DateTime sum = d.Add(t);
Console.WriteLine(String.Format("{0}\r\n{1}\r\n{2:yyyy-MM-dd HH:mm:ss}", d, t, sum));